redis基本操作概覽

codecraft發表於2016-01-25

連線

redis-cli -h 192.168.2.215 -p 6379

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

select 1

檢視所有值

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

獲取多個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
#atomic轉移列表元素到另一個列表
#從右邊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

相關文章