Redis 是一個開源的使用 ANSI C 語言編寫、遵照 BSD 協議、支持網絡、可基於內存、分佈式、可選持久性的鍵值對(Key-Value)存儲數據庫,並提供多種語言的 API。數據庫
Redis 一般被稱爲數據結構服務器,由於值(value)能夠是字符串(String)、哈希(Hash)、列表(list)、集合(set)和有序集合(sorted set)等類型。json
#經常使用操做 SET key value //存入字符串鍵值對 MSET key value [key value ...] //批量存儲字符串鍵值對 SETNX key value //當且僅當key不存在,存入value返回1;若key已存在,則不作操做返回0。 GET key //獲取一個key對應的value MGET key [key ...] //批量獲取字符串鍵值 DEL key [key ...] //刪除鍵 #原子加減操做 INCR key //將key中存儲的數字值(value爲string報錯)加1 DECR key //將key中存儲的數字值(value爲string報錯)減1 INCRBY key n //將key中存儲的數字值加n DECRBY key n //將key中存儲的數字值減n
採用String類型的對象緩存有兩種方式:1.直接緩存整個對象的json;2.採用將key進行分離爲user:ID:屬性,採用MSET存儲,用MGET獲取各屬性值。緩存
SET key value [EX seconds] [PX milliseconds] [NX|XX]
EX seconds :設置失效時間,單位秒
PX milliseconds:設置失效時間,單位毫秒
NX : key不存在時設置value,成功返回OK,失敗返回nil
XX : key存在時設置value,成功返回OK,失敗返回nil
設置key爲product:ID過時時間爲10s,若是當前key已經存在就會直接返回nil。服務器
#hash經常使用操做 HSET key field value //存儲一個哈希表key的鍵值 HSETNX key field value //存儲一個不存在的哈希表key的鍵值 HMSET key field value [field value...] //在一個哈希表key中存儲多個鍵值對 HGET key field //獲取哈希表key對應的field鍵值 HMGET key field [field ...] //批量獲取哈希表key中多個field鍵值 HDEL key field [field ...] //刪除哈希表key中的field鍵值 HLEN key //返回哈希表key中field的數量 HGETALL key //返回哈希表key中全部的鍵值 HINCRBY key field n //爲哈希表key中field鍵的值加上增量n
當須要存儲的對象不大時,能夠採用固定的key,對應的field爲ID:屬性,採用HMSET的方式,這樣就能將全部的對象存儲在同一個key中;微信
當須要存儲的對象比較大時,能夠將key進行動態分離開,例如:設置key爲user:序號,序號爲0~1000,每一個存儲對象根據id%序號,肯定當前對象分配到哪一個key中。網絡
定義:用戶id爲key,商品id爲field,商品數量爲value數據結構
#List經常使用操做 LPUSH key value [value ...] //將一個或多個值value插入到key列表的表頭(最左邊),最後的值在最前面 RPUSH key value [value ...] //將一個或多個值value插入到key列表的表尾(最右邊) LPOP key //移除並返回key列表的頭元素 RPOP key //移除並返回key列表的尾元素 LRANGE key start stop //返回列表key中指定區間內的元素,區間以偏移量start和stop指定,從0開始 BLPOP key [key ...] timeout //從key列表表頭彈出一個元素,沒有就阻塞timeout秒,若是timeout=0則一直阻塞 BRPOP key [key ...] timeout //從key列表表尾彈出一個元素,沒有就阻塞timeout秒,若是timeout=0則一直阻塞
用戶A關注了公衆號B和公衆號C架構
#Set經常使用操做 SADD key member [member ...] //往集合key中存入元素,元素存在則忽略,若key不存在則新建 SREM key member [member ...] //從集合key中刪除元素 SMEMBERS key //獲取集合key中全部元素 SCARD key //獲取集合key中的元素個數 SISMEMBER key member //判斷member元素是否存在於集合key中 SRANDMEMBER key [count] //從集合key中隨機選出count個元素,元素不從key中刪除 SPOP key [count] //從集合key中隨機選出count個元素,元素從key中刪除 #Set運算操做 SINTER key [key ...] //交集運算 SINTERSTORE destination key [key ...] //將交集結果存入新集合destination中 SUNION key [key ...] //並集運算 SUNIONSTORE destination key [key ...] //將並集結果存入新集合destination中 SDIFF key [key ...] //差集運算 SDIFFSTORE destination key [key ...] //將差集結果存入新集合destination中
#ZSet經常使用操做 ZADD key score member [[score member]...] //往有序集合key中加入帶分值元素 ZREM key member [member...] //往有序集合key中刪除元素 ZSCORE key member //返回有序集合key中元素member的分值 ZINCREBY key increment member //爲有序集合key中元素member的分值加上increment ZCARD key //返回有序集合key中元素個數 ZRANGE key start stop [WITHSCORES] //正序獲取有序集合key從start下標到stop下標的元素 ZREVRANGE key start stop [WITHSCORES] //倒序獲取有序集合key從start下標到stop下標的元素 #ZSet運算操做 ZUNIONSTORE destkey numberkeys key [key...] //並集計算(相同元素分值相加),numberkeys一共多少個key,WEIGHTS每一個key對應的分值乘積 ZINTERSTORE destkey numberkeys key [key...] //交集計算(相同元素分值相加),numberkeys一共多少個key,WEIGHTS每一個key對應的分值乘積