redis基本命令

codecraft發表於2016-11-29

連線redis

redis-cli -h 192.168.2.215 -p 6379

檢視鍵

keys *

存取變數

set num 1
get num

字串操作

set str "hello"
append str "world"
strlen str

檢視型別

type num
type amap
type alist

檢視是否存在key

exists num
exists alist
hexists mmap email

切換資料庫(預設0資料庫)

select 1

獲取多個key

mget num str
mset num 3 str "world"

bit操作

set fg "bar"
getbit fg 0
getbit fg 6
setbit fg 0 1
bitcount fg

原子操作

incr num
incrby num 3
decr num
decrby num 2
incrbyfloat num 2.1
#沒有decrbyfloat
incrbyfloat num -0.1 

list操作

lpush alist a
lpush alist b
lpush alist c
rpush alist d
lpop alist
rpop alist
llen alist
  • 獲取片段,包含最右邊的元素,支援負數索引

lrange alist 0 4
  • 獲取所有元素

lrange alist 0 -1
  • 從左邊開始刪除第一個值為p的元素

lrem alist 1 p
  • 刪除所有值為p的元素

lrem alist 0 p
  • 從右邊開始刪除第一個值為p的元素

lrem alist -1 p
  • 查詢索引為0的元素

lindex alist 0
  • 查詢右邊第一個元素

lindex alist -1
  • 通過索引賦值

lset alist 2 y
  • 刪除指定索引外的元素

ltrim alist 0 3
  • 在指定值w後插入

linsert alist after w k
  • 在指定值w之前插入

linsert alist before w x
  • 從右邊pop一個元素到目標列表

rpoplpush alist blist

按其他鍵排序

lpush slist 2 1 3
set itemscore:1 50
set itemscore:2 100
set itemscore:3 -10
sort slist by itemscore:* desc

集合操作

sadd myset a
sadd myset b c
  • 檢視所有

smembers myset
  • 檢視集合元素個數

scard myset
  • 刪除元素

srem myset c
  • 判斷元素是否在集合中

sismember myset c
  • 集合運算

sadd seta 1 2 3
sadd setb 2 3 4
  • 計算差集

sdiff seta setb
  • 計算差集並儲存到setj

sdiffstore setj seta setb
sadd setc 2 3
sdiff seta setb setc
  • 計算交集

sinter seta setb
  • 計算交集並儲存到setx

sinterstore setx seta setb
  • 計算並集

sunion seta setb
  • 計算並集並儲存到setu

sunionstore setu seta setb
  • 隨機獲取元素

srandmember seta 2
  • 從集合隨機彈出一個元素

spop seta
  • 集合排序,預設將元素轉為雙精度浮點,從小到大排序

sort seta
  • 按照字典順序

sort setn alpha

有序集合

  • 列表是雙向連結串列實現的,獲取靠近兩端的元素速度快,當元素增多時訪問中間元素變慢

  • 比較適合新鮮事、日誌這種很少查詢中間元素的應用

  • 有序集合是使用雜湊表/跳躍表實現的,讀取中間元素也很快

  • 列表不能簡單調整某個元素的位置,有序集合可以

  • 有序集合會給每個元素計算分數,更耗記憶體,是所有集合中最高階的

zadd sortset 89 tom 90 jim 100 david
  • 更新jim分數

zadd sortset 78 jim
  • 按照得分從小到大檢視元素

zrange sortset 0 -1
  • 按照得分從大到小檢視元素

zrevrange sortset 0 -1
  • 檢視元素和得分

zrange sortset 0 -1 withscores
  • 檢視得分

zscore sortset david
  • 按照得分範圍檢視,包含90

zrangebyscore sortset 90 100
  • 不包含90

zrangebyscore sortset (90 100
  • 無窮,從第二個人開始取3個人

zrangebyscore sortset (80 +inf limit 1 3
  • 增加某個元素分數

zincrby sortset -3 tom
  • 獲取元素個數

zcard sortset
  • 獲取指定範圍內元素個數

zcount sortset 90 100
zcount sortset (89 +inf
  • 刪除一個或多個元素

zrem sortset jim
  • 按照排名刪除

zremrangebyrank sortset 0 2
  • 按照分數範圍刪除分數

zremrangebyscore sortset (60 80
  • 獲取排名,從小到大

zrank sortset jim
  • 獲取排名,從大到小

zrevrank sortset jim
  • 計算有序集合交集

zadd t1 1 a 2 b
zadd t2 10 a 20 b
  • 2為元素個數

zinterstore rs 2 t1 t2
  • aggregate為新集合元素分數的計算方式

zinterstore rs1 2 t1 t2 aggregate min
zinterstore rs2 2 t1 t2 aggregate max
zinterstore rs3 2 t1 t2 aggregate sum
  • 增加權重

zinterstore rs4 2 t1 t2 weights 1 0.1
zrange rs2 0 -1 withscores

map操作

hset amap name "psersia"
//update or insert a key
hset amap email "a@g.com"
hget amap name

hgetall amap

hmset mmap username persia password pw age 3
hmget mmap username age
hgetall mmap
//當欄位不存在時賦值,atomic
hsetnx mmap email p@gmail.com
hincrby mmap age 2
//如果不存在,則建立一個key
hincrby mmap score 60
hdel mmap score
hkeys mmap
hvals mmap
hlen mmap

事務

multi
sadd "user:1:following" 2
sadd "user:2:followers" 1
exec
  • watch的變數在watch之後被修改

#於是事務不執行,count值為2
set count 1
watch count
set count 2
multi
set count 3
exec
get count

設定快取時間

set mycache 100
  • 15分鐘後失效,-1為永久存活

expire mycache 900
  • 重新設定生存時間

expire mycache 90
#以毫秒為單位
pexpire mycache 1000

檢視剩餘的存活時間

ttl mycache
  • 取消快取,改為永久存活

persist mycache
  • set也可以清除生存時間

set mycache hello
ttl mycache

lpush,rpop實現訊息佇列

lpush q hello world
lpush q test msg
lrange q 0 -1
rpop q
//帶10秒的超時時間
brpop q 10
//超時時間設為0,當沒有元素時一直阻塞
brpop q 0

釋出訂閱模式

publish mychannel hi
subscribe mychannel
//匹配mychannel.1,mychannel.10
psubscribe mychannel.?*
unsbuscribe mychannel