在Java中使用Redis

 

準備工做

一、下載驅動包jedis.jar。redis

名字很好記,就是把redis的首字母r換成j。數據庫

 

二、在項目中添加jedis.jar安全

 

 

 

 

Jedis類

在Java中操做Redis使用的是Jedis類。服務器

 

一、構造函數

  • Jedis()    //使用默認的host、port。host默認爲localhost/127.0.0.1,port默認爲6379。
  • Jedis(String  host)    //指定Redis服務器地址,IP、域名都可。使用默認端口6379.
  • Jedis(String  host, int port)     
  • Jedis(String  host, int port , int  timeout)   //超時時間
  • Jedis(String host,int port , boolean  ssl)   //是否使用安全鏈接
  • Jedis(String  host,int port, int timeout, boolean  ssl)

 

 

二、鏈接服務器

  • auth(String password)   //驗證密碼
  • ping()    //測試鏈接,鏈接成功返回String類型的PONG。
  • connect()   //鏈接服務器。使用auth()時會自動自動調用connect()鏈接,能夠不用connect()
  • disconnect()   //關閉鏈接
  • close()   //關閉鏈接並釋放資源,會自動調用disconnect()
  • quit()   //關閉鏈接並退出,會自動調用close()
  • shutdown()   //關閉服務器

 

 

 

三、配置參數

  • configSet(String param, String value)
  • configGet(String param)
  • configRewrite()    //同步到配置文件中

 

 

 

四、操做數據庫

  • select(index  db)    //選擇當前使用的數據庫,默認爲數據庫0
  • getDB()   //返回當前使用的數據庫,int型。
  • dbSize()   //當前數據庫中key的數量,返回值是long型

 

  • flushDB()    //清空當前數據庫
  • flushAll()   //清空全部數據庫

 

  • save()   //同步、持久化到數據庫文件(.rdb)
  • bgsave()   //後臺save()

 

  • keys(String pattern)   //獲取當前數據庫中,全部符合要求的key,返回值時Set<String>類型。"*"表示匹配全部的key。

 

 

 

 

五、操做鍵值對

  • set(String key,String value)    //若是key已存在,會覆蓋

 

  • setnx(String  key, String value)    //key不存在時才設置,若key已存在,則不做操做(不會覆蓋原來的值)

 

  • setex(String key,int seconds, String value)   //過時時間,多少秒後過時,如不設置則鍵值對一直存在。setex即set  expire,設置生存期。

 

  • mset(String key1,String value2,String  key2, String value2, .....)    //同時設置多個鍵值對。mset即multiple  set。
  • msetnx(String key1,String value2,String  key2, String value2, .....)    //key不存在時才設置

 

  • get(String key)    //返回String類型的value
  • mget(String key1,String key2, .....)   //同時獲取多個value,返回值是List<String>

 

  • exists(String key)   //是否存在
  • expire(String key, int seconds)   //設置過時時間

 

  • del(String key)    //刪除
  • del(String key1, String key2, ....)    //刪除多個

 

  • rename(String oldKey,String newKey)    //重命名key
  • type(String key)    //獲取value的類型,string、hash、list、set、sorted set。

 

  • incr(String key)    //key是內容爲int的String,將value+1。返回操做後的數值,long型。
  • incrBy(String  key, long increment)   //增長指定值(long),返回long。
  • incrByFloat(String key,double increment)    //double型

 

  • decr(String key)   //-1
  • decrBy(String key,long  decrement)    //-decrement

沒有decrByFloat()方法。函數

 

key、value對支持2種數據類型:測試

  • String、String,鍵和值都用String
  • byte[]、byte[],鍵和值都用byte[],二進制數據。

上面的方法都是操做String、String類型的鍵值對,byte[]、byte[]類型的鍵值對也有一樣的方法。ui

 

 

 

 

六、操做hash

操做hash的方法都帶有前綴h。spa

  • hset(String key,String field, String value)    //設置一個字段
  • hsetnx(String key,  String field,  String value)
  • hset(String   key,Map<String ,String>  hash)

 

  • hget(String key , String field)
  • hmget(String key,  String field1, String field2,  ....)    //獲取多個字段的值,返回值是List<String>類型
  • hgetAll(String  key)    //獲取全部的字段,返回值是Map<String , String >類型

 

  • hexists(String key, String  field)   //該字段是否存在
  • hdel(String  key, String  field)    //刪除該字段

 

  • hkeys(String key)   //獲取全部的字段名,返回值是Set<String>
  • hvals(String  key)   //獲取全部的字段值,返回值是List<String>
  • hlen(String key)   //返回該hash表中字段數,返回值是Long型

 

  • hincrBy(String  key, String  field, long  increment)   //返回操做後的數值,long型
  • hincrByFloat(String key, String field , double  increment)   //double

沒有hdecrXxx()方法。code

 

 

 

 

七、操做list

  • lpush(String  key, String value1, String  value2, .....)     //在列表頭部推入一個或多個元v素。l表示left,左邊,即列表的頭部。
  • lpushx(String key, String value1, String value2 ,.....)    
  • lpop(String key)   //彈出並返回列表的第一個元素,會從列表中移除該元素

 

  • rpush(String key, String value1, String value2, ....)   //在列表尾部推入一個或多個元素
  • rpushx(String key, String value1, String value2, ....) 
  • rpop(String key)   //彈出並返回列表的最後一個元素

 

  • lindex(String key, long index)   //返回該位置上的元素,String類型。
  • linsert(String key,ListPosition  position, String value1, String value2)   //在value1的前面/後面插入value2。第二個參數是常量,可用的值:ListPosition.BEFORE,ListPosition.AFTER。

 

  • llen(String key)    //元素個數,long
  • lrange(String key, long  startIndex, long  endIndex)   //返回[startIndex, endIndex]上的全部元素,List<String>

 

  • lset(String key, long index, String value)   //修改該位置上的元素值。index位置上要已有元素。
  • lrem(String key, long count, String value)   //從列表中移除count個值是value的元素
  • ltrim(String key, long startIndex, long  endIndex)   //修剪列表,只保留[startIndex, endIndex]上的元素,其他刪除。返回String類型的操做結果,「OK」表示操做成功。

 

 

 

 

八、操做set

  • sadd(String key, String value1, String value2, ....)   //添加一個或多個元素
  • srem(String key, String value1, String value2, ...)    //移除一個或多個元素
  • scard(String  key)   //返回集合中的元素個數,long

 

  • smembers(String key)   //返回集合中全部的元素,Set<String>
  • sismember(String key, String element)   //集合中是否有該元素,boolean

 

  • spop(String key)   //隨機彈出一個元素,String。pop操做均會移除該元素。
  • spop(String key, long count)   //隨機彈出count個元素,Set<String>。由於set是無序的,因此是隨機彈出。

 

  • srandmember(String key)   //隨機返回一個元素。與spop()的區別是,srandmember()不會移除該元素。
  • srandmember(Sring key, long count)

 

  • sdiff(String key1, String key2, ....)   //求差集,返回Set<String>
  • sdiffstore(String  destKey, String key1, String key2)   //求差集,但把差集中的元素放到destKey集合中。返回差集中的元素個數,long。

相同用法的還有:blog

  • sinter   交集
  • sunion   並集

 

set是無序的,因此沒有與索引相關的方法。

 

 

 

 

九、操做sorted  set

  • zadd(String key, doubel  score, String element)   
  • zadd(String key, Map<String, Double>  map)
  • zrem(String key, String element1, String element2,  ....)   //移除一個或多個元素

 

  • zcard(String key)   //元素個數,long
  • zcount(String key, double  minScore, double  maxScore)   //返回[minScore, maxScore]區間上的元素個數
  • zcount(String key, String startElement, String  endElement)   //返回[startElement, endElement]上的元素個數。元素根據score排序,是有順序的。

 

  • zrank(String key, String element)   //返回值是value的元素個數。有序,元素可重複。
  • zincrby(String key, double increment, String element)    //返回操做後的值,double

 

  • zinter(String destKey, String...keys)    //交集
  • zunion(String destKey,String...keys)   //並集

 

  • zrangeByXxx()  系列方法      //返回該某個區間上的全部元素,Set<String>
  • zrevrangeXxx()  系列方法   //先反序排列,再返回某個區間上的全部元素,Set<String>
  • zremrangeByXxx()  系列方法   //刪除某個區間上的全部元素

 

 

list返回多個元素時用的是List,set、sorted set返回多個元素時用的是Set,hash返回多個值時用的是Map、List、Set。

 

 

 

 

使用示例

一、簡單測試

1  Jedis jedis=new Jedis("127.0.0.1");
2         jedis.auth("abc");
3         if (jedis.ping().equals("PONG")){  //鏈接成功
4             jedis.mset("name","張三","age","20");
5             System.out.println(jedis.get("name"));  //張三
6             System.out.println(jedis.get("age"));   //20
7             jedis.close();
8         }

 

 

 

 

二、迭代數據庫中全部的key 

 1 Jedis jedis=new Jedis("127.0.0.1");
 2         jedis.auth("abc");
 3         if (jedis.ping().equals("PONG")){  //鏈接成功
 4             jedis.flushAll();  //清除其餘數據
 5             jedis.mset("name","張三","age","20");
 6 
 7             Set<String> keys=jedis.keys("*");
 8             Iterator<String> iterator=keys.iterator();
 9 
10             String key=null;
11             while (iterator.hasNext()){
12                 key=iterator.next();
13                 System.out.println(key+":"+jedis.get(key));   //若是value不是String類型,此句代碼會報錯,因此以前flushAll()清空了數據庫,保證value都是String類型
14             }
15             
16             jedis.close();

 

 

 

 

 

三、迭代hash、list、set、sorted set

 1 Jedis jedis=new Jedis("127.0.0.1");
 2         jedis.auth("abc");
 3         if (jedis.ping().equals("PONG")){  //鏈接成功
 4             jedis.lpush("students","張三","李四","王五");
 5 
 6             List<String> list=jedis.lrange("students",0,-1);
 7             Iterator<String> iterator=list.iterator();
 8 
 9             while (iterator.hasNext()){
10                 System.out.println(iterator.next());  //王5、李4、張三
11             }
12 
13             jedis.close();
14         }
相關文章
相關標籤/搜索