繼上一篇安裝好redis後,本篇將封裝java類以方便對redis進行各種操作,因為我也是新手正在學習,只是很簡單的封裝。先貢獻一張DB圖,好讓大家對各種DB整體有個了解。
通過上圖知道,Redis與Memcache放在同一層級,說明他們之間有很多相似之處,另外redis在隊列和棧上,數據持久化等個人覺得比MemCache優點多,兩者之間的雷同網上很多學習資料,不再闡述。下面開始學習java類對Redis操作的簡單封裝:
一、准備工作a.開啟Redis服務(我的是在Ubuntu下)
執行命令redis-server成功開啟服務(PS:執行redis-server &命令可以後台運行服務,很多時候這點很必要)
b.測試連接
在Ubuntu上執行命令ifconfig查看服務IP,我的是192.168.161.130,如圖:
測試連接:在ubuntu上可以ping通服務iP,現在我在Windows下看是否可ping通(redis服務的防火牆關掉),如圖:
確認可以ping通就可以開始下一步了
二、java封裝工作 a、 先來看下java類整體目錄結構
b、貼出代碼:
接口類IRedis.java:
package redis;
import java.util.List;
import java.util.Map;
import java.util.Set;
public interface IRedis {
//String
void set(String key,String value) throws Exception;//添加
String get(String key) throws Exception;//獲取
//set
void sadd(String key,Set<String> value) throws Exception;//添加
void srem(String key,Set<String> value) throws Exception;//刪除
Long scard(String key) throws Exception;//獲取key對應的value總數
Set<String> smembers(String key) throws Exception;//獲取key對應的所有value
boolean sismember(String key,String value) throws Exception;//判斷是否存在
String srandmember(String key) throws Exception;//隨機獲取數據
//map
void hmset(String key,Map<String,String> map) throws Exception;//添加
Long hlen(String key) throws Exception;//mapkey個數
Set<String> hkeys(String key) throws Exception;//map中所有鍵值
List<String> hvals(String key) throws Exception;//map中所有value
List<String> hmget(String key,String s1,String s2) throws Exception;//取出map中的name、password字段值
void hdel(String key,String s) throws Exception;//刪除map中的某一個鍵值 password
//list
void lpush(String key,List<String> list) throws Exception;//添加
List<String> lrange(String key,Long start,Long end) throws Exception;//獲取
void del(String key) throws Exception;//刪除
//append
void append(String key,String value) throws Exception;//追加
}實現類:Redis.java:
package redis;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.Jedis;
public class Redis implements IRedis {
@Override
public void sadd(String key, Set<String> value) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
for(String str: value){
jedis.sadd(key, str);
}
// Iterator<String> it = value.iterator();
// while (it.hasNext()) {
// String str = it.next();
// System.out.println(str);
// jedis.sadd(key,str);
// }
}
@Override
public void set(String key, String value) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
jedis.set(key,value);
}
@Override
public void srem(String key, Set<String> value) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
Iterator<String> it = value.iterator();
while(it.hasNext()){
String str = it.next();
jedis.srem(key, str);
}
}
@Override
public String get(String key) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
return jedis.get(key);
}
@Override
public Long scard(String key) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
return jedis.scard(key);
}
@Override
public Set<String> smembers(String key) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
return jedis.smembers(key);
}
@Override
public boolean sismember(String key, String value) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
return jedis.sismember(key,value);
}
@Override
public String srandmember(String key) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
return jedis.srandmember(key);
}
@Override
public void hmset(String key, Map<String, String> map) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
jedis.hmset(key,map);
}
@Override
public Long hlen(String key) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
return jedis.hlen(key);
}
@Override
public Set<String> hkeys(String key) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
return jedis.hkeys(key);
}
@Override
public List<String> hvals(String key) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
return jedis.hvals(key);
}
@Override
public List<String> hmget(String key, String s1, String s2)
throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
return jedis.hmget(key,s1,s2);
}
@Override
public void hdel(String key, String s) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
jedis.hdel(key,s);
}
@Override
public void lpush(String key, List<String> list) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
for(String s: list){
jedis.lpush(key,s);
}
}
@Override
public List<String> lrange(String key, Long start, Long end)
throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
return jedis.lrange(key, start, end);
}
@Override
public void del(String key) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
jedis.del(key);
}
@Override
public void append(String key, String value) throws Exception {
Utils f = Utils.createFactory();
Jedis jedis = f.connection();
jedis.append(key,value);
}
}工具類Factory.java:
package redis;
import redis.clients.jedis.Jedis;
public class Utils {
private static final String ip = "192.168.161.130";
private static final Integer port = 6379;
public Jedis connection() throws Exception{
Jedis jedis = new Jedis(ip,port);
return jedis;
}
public static Utils createFactory() throws Exception{
return new Utils();
}
}三、測試寫了兩個測試的方法,RedisTest.java:
package test;
import java.util.HashSet;
import java.util.Set;
import redis.Redis;
public class RedisTest {
public static void main(String[] args) throws Exception {
// append();
sadd();
}
public static void append() throws Exception{
Redis r = new Redis();
r.set("z", "wb");
String s = r.get("z");
System.out.println(s);
}
public static void sadd() throws Exception{
Redis r = new Redis();
Set<String> set = new HashSet<String>();
set.add("w");
set.add("b");
r.sadd("zsss",set);
Set<String> t = r.smembers("zsss");
System.out.println(t);
}
// ↑當測第二個方法時也是用的跟第一個一樣的鍵“z”,報WRONGTYPE Operation against a key
//holding the wrong kind of value,因為redis中已經存在了相同的key, 而且key對應的值類型並不是Set,
//而是String,浪費好多時間,不過遇到bug正是學習提高的時候
}測試結果:這篇先到這裡,今天俺的發小大學畢業了,而我已經工作兩年有余了,回顧自己的大學時光,更多的是遺憾,不過現在已經淡然了,有了愛學習的習慣,可能是上學時欠下的,話說我們學校旁邊又多了幾棟百度的大廈,百度一直是我夢寐以求的公司。加油吧,貼幾張我們學校的圖,以此激勵自己。