1. 程式人生 > >redis數據類型--個人常規用法

redis數據類型--個人常規用法

pan 重復值 add manager 存在 incr ids 重復 urn

一.String

1.可以容納最高512M的value。

2.經常用於通過expire來實現自動過期的一些值,直接通過setex 來。

3.通過incrby的方式,來實現value值得增長。

4.執行setnx會返回加成後的值來決定誰獲取到了鎖,比如同時往一個空的key寫 setnx key value,哪個線程返回值是1,即為搶到了鎖。

基於以上,則可以實現簡單的分布式鎖:

public void lock(){
    if(jedis.setnx("test.lock","1") == 1){
        jedis.expire("test.lock",3);
        
//TODO } } public void unlock(){ jedis.del("test.lock"); }

二.hash

hash是一個string類型的field和value的映射表,hash很多操作指令都類似於string類型的指令,經常用於存儲數據。

1.hash 常常用於存儲數據。

2.hash 是 key field value的數據結構,與String相比,更省內存,但是對應自動過期粒度到Key,因此選擇哪種數據結構依賴於需求決定。

三.List

List 簡單就是隊列,一般都是用於做簡單的FIFO隊列。

1.采用rpush key value 把值賽進去,通過lpop把值取出來。

2.如果是一次取出多個可以用另外一種方式減少交互的次數,降低往返的時延。

a.pipeline 降低交互次數。

b.lrange 獲取數據

c.ltrim 移除數據

1 Jedis client = clientManager.getPooledClient();
2 Pipeline pipeline = client.pipelined();
3 pipeline.lrange(key,start,end);
4 pipeline.ltrim(key,end + 1, -1);
5 List<Object> rs = pipeline.syncAndReturnAll();
6 List<String> result = (List<String>) rs.get(0);

四.Set

Set 就是set,String 類型的無序集合,不允許重復

1.set類型可以簡單通過sadd 判定某個值是否存在,不存在則返回 1,存在返回0.

2.在一些不允許重復值的場景下還是非常好用的。

五.sortedSet

有序集合,默認根據score排序,可使用場景非常多。

1.熱門排序,由於在寫入的時候就根據score排序,因此根據score獲取非常快,但是在寫入時候時間復雜度會相對高些。

2.分布式定時任務,這個當時無意中發現的,再一些時間精度要求沒那麽高的場景時候非常好用。

a.設置定時任務,key score(時間戳) member(定時任務參數)

b.zrangebyscore,獲取某個區間內的任務。返回值是Set<String> 即member的列表

c.zrem key member,根據爭搶有移除到的返回值為1,未移除到的返回值為0,來判斷這個定時任務在哪臺機器上執行。

d.根據具體的member來執行任務

//添加定時任務
jedis.zadd("cronKey",1554739013,"{‘param‘:‘123‘}");

//獲取區間定時任務
Set<String> members = jeids.zrangeByScore("cronKey",0,currentTime);

for(String value:members){
  if(jedis.zrem("cronKey",value) > 0){
    //TODO
  }
}

redis數據類型--個人常規用法