Redis數據類型及使用場景redis
說明:設置/批量設置鍵值信息,value能夠是任何形式的字符串數據庫
用法:json
set key value
緩存
get key
數據結構
場景:分佈式
常規緩存使用方式優化
說明:將key中的數值增/減1,若是key不存在會先初始化爲0再加1,該操做是原子性的code
用法:對象
incr key
隊列
get key
場景:
結合expire
用作計數器和限數器
如某篇文章點擊量經過incr article:id
來計數,用get article:id
來獲取
說明:設置指定偏移量上的位;獲取指定偏移量上的位;指定key中,位值爲1的數量
用法:
setbit key offset value
getbit key offset
bitcount key
場景:
活躍數統計,開關等
如日活躍人數,經過setbit dayactive:yyyyMMdd userid 1
,經過bitcount dayactive:yyyyMMdd
來獲取
說明:當key不存在時候將key的值設爲value,存在不作操做;將key的值設爲value,並返回key的舊值
用法:
setnx a 11
getset a 22
場景:
分佈式鎖實現
說明:當key不存在時候將key的值設爲value,存在不作操做;將key的值設爲value,並返回key的舊值
用法:
hset key field value
hget key field
hkeys key
hgetall key
場景:
存儲對象信息,用於優化普通鍵值存儲
如原來存儲用戶的年齡、姓名、性別等信息須要set user:userid {\"name\":\"lily\",\"age\":18,\"sex\":1}
這樣把信息轉出json後再存,
當數據量大的時候十分佔用內存;
用hash類型能夠很好解決這個問題
經過hmset user:userid name lily age 18 sex 1
來存儲
經過hgetall user:userid
獲取所有內容
經過hget user:userid name
獲取某個屬性
說明:list是redis比較重要的一個數據結構,支持插入列表、彈出隊列、阻塞彈出隊列、返回列表元素、獲取列表長度等操做
用法:
lpush ls 1 2 3 4 5
lrange ls 0 -1
場景:
列表、消息隊列等
如列表反向cache,經過列表存儲數據庫存儲信息,而後在從數據庫中獲取詳細信息
如生產者往隊列中插入消息lpush queue:topic:name msg
,消費者經過rpop ls
和brpop ls 10
來消費消息
說明:實現了集合相關的添加、刪除、差集、交集、並集等操做
用法:
sadd s1 1 2 3 5 6
sinter s1 s2
場景:
好友、關注、被關注、共同好友等
如關注個人人,經過sadd user:myid 10
來關注我,經過smembers user:myid
來獲取關注個人人
說明:能夠添加元素的權重和值到key中,並按權重來獲取序列
用法:
zadd ls 10 a1 6 a2 17 a3
zrange ls 0 -1
場景:
排行榜、有序隊列
如排名前10的玩家,經過zadd user:leaderboard score userid
來設置玩家分值,經過zrevrange user:leaderboard 0 10
來獲取