目錄redis
setnx key value,當key不存在時,將 key 的值設爲 value ,返回1。若給定的 key 已經存在,則setnx不作任何動做,返回0。瀏覽器
當setnx返回1時,表示獲取鎖,作完操做之後del key,表示釋放鎖,若是setnx返回0表示獲取鎖失敗,總體思路大概就是這樣分佈式
如知乎每一個問題的被瀏覽器次數code
set key 0 incr key // incr readcount::{帖子id} 每閱讀一次 get key // get readcount::{帖子id} 獲取閱讀量
實現相似於RDBMS的Sequence功能,生成一系列惟一的序列號隊列
設置序列起始值:內存
SET sequence "10000"
獲取一個序列值:rem
INCR sequence
直接將返回值做爲序列使用便可。get
獲取一批(如100個)序列值:消息隊列
INCRBY sequence 100
假設返回值爲N,那麼[N - 99 ~ N]的數值都是可用的序列值。string
當多個客戶端同時向Redis申請自增序列時,Redis可以確保每一個客戶端獲得的序列值或序列範圍都是全局惟一的,絕對不會出現不一樣客戶端獲得了重複的序列值的狀況
在list裏面一邊進,一邊出便可
# 實現方式一 # 一直往list左邊放 lpush key value # key這個list有元素時,直接彈出,沒有元素被阻塞,直到等待超時或發現可彈出元素爲止,上面例子超時時間爲10s brpop key value 10 # 實現方式二 rpush key value blpop key value 10
假如說小編li關注了2個微博a和b,a發了一條微博(編號爲100)就執行以下命令
lpush msg::li 100
b發了一條微博(編號爲200)就執行以下命令:
lpush msg::li 200
假如想拿最近的10條消息就能夠執行以下命令(最新的消息必定在list的最左邊):
# 下標從0開始,[start,stop]是閉區間,都包含 lrange msg::li 0 9
# 參加抽獎活動 sadd key {userId} # 獲取全部抽獎用戶,大輪盤轉起來 smembers key # 抽取count名中獎者,並從抽獎活動中移除 spop key count # 抽取count名中獎者,不從抽獎活動中移除 srandmember key count
# 1001用戶給8001帖子點贊 sadd like::8001 1001 # 取消點贊 srem like::8001 1001 # 檢查用戶是否點過贊 sismember like::8001 1001 # 獲取點讚的用戶列表 smembers like::8001 # 獲取點贊用戶數 scard like::8001
seven關注的人
sevenSub -> {qing, mic, james}
青山關注的人
qingSub->{seven,jack,mic,james}
Mic關注的人
MicSub->{seven,james,qing,jack,tom}
# 返回sevenSub和qingSub的交集,即seven和青山的共同關注 sinter sevenSub qingSub -> {mic,james} # 我關注的人也關注他,下面例子中我是seven # qing在micSub中返回1,不然返回0 sismember micSub qing sismember jamesSub qing # 我可能認識的人,下面例子中我是seven # 求qingSub和sevenSub的差集,並存在sevenMayKnow集合中 sdiffstore sevenMayKnow qingSub sevenSub -> {seven,jack}
每一個商品入庫的時候即會創建他的靜態標籤列表如,品牌,尺寸,處理器,內存。
# 將拯救者y700P-001和ThinkPad-T480這兩個元素放到集合brand::lenovo sadd brand::lenovo 拯救者y700P-001 ThinkPad-T480 sadd screenSize::15.6 拯救者y700P-001 機械革命Z2AIR sadd processor::i7 拯救者y700P-001 機械革命X8TIPlus # 獲取品牌爲聯想,屏幕尺寸爲15.6,而且處理器爲i7的電腦品牌(sinter爲獲取集合的交集) sinter brand::lenovo screenSize::15.6 processor::i7 -> 拯救者y700P-001
redis的zset天生是用來作排行榜的、好友列表, 去重, 歷史記錄等業務需求。
# user1的用戶分數爲 10 zadd ranking 10 user1 zadd ranking 20 user2 # 取分數最高的3個用戶 zrevrange ranking 0 2 withscores