strings型別
設值
設單個值
set key value
如果不存在,設一個值
setnx key value
//nx: not exists
設定過期時間(expired time)
setex key [number] value
//number為有效期,有效期過後,值為nil
把number索引後面替換為value
setrange key [number] value
設定多個值
mset key1 value1 key2 value2 …
批量設值
msetnx key1 value1 key2 value2 …
//設值全部成功或全部回滾
取值
get key
設定key值,並返回key的舊值
getset key value
獲取指定區間的子字串
getrange key number1 number2
批量獲取key值,不存在的返回nil
mget key1 key2 key3 …
值操作
自增1
incr key
增加指定值
incrby key number
自減1
decr key
減去指定值
decry key number
拼接字元
append key value
取key的value長度
strlen key
hashes型別
建立hash資料結構,指定key值為value
hset hash_name key value
如果不存在,設定新值
hsetnx hash key value
批量設定hash的多個field
hmset hash key1 value1 key2 value2 …
獲取hash指定的key值
hget hash key
獲取指定的全部key值
hmget hash key1 key2 …
給指定的hash field加上定值number
hincrby hash key number
指定的field是否存在
hexists hash key
獲取指定的hash的field數量
hlen hash
移除指定的field
hdel hash key
返回所有key值
hkeys hash
返回所有value值
hvals hash
返回所有key value
hgetall hash
lists型別
連結串列結構,主要功能是push pop,獲取範圍內的值
分非阻塞版本(預設)、阻塞版本
list左側(或稱頭部)新增值value
lpush list value
list右側(或稱尾部)新增值value
rpush list value
在key對應list的位置之前/之後插入元素value
linsert list before/after key value
設定list中指定下標元素值
lset list index value
從list中刪除count個value值
lrem list count value
保留指定區間的值
ltrim list index1 index2
彈出頂部元素並返回該值
lpop list
同上,底部
rpop list
彈出list1底部元素,並新增到list2頭部,返回該值
rpoplpush list1 list2
返回value在list中的索引
lindex list value
返回list長度
llen list
sets型別
集合,和數學的集合概念相似,有交併差等操作(union、intersection、difference)
無序string型別集合,由hashtable實現,複雜度O(1)
新增set值
sadd set value
移除set中的值value
srem set value
隨機移除set的value並返回
spop set
差集
sdiff set1 set2
返回set1於set2的差集(即set1中不存在於set2中的value的集合)
sdiff set1 set2的結果 不等於 sdiff set2 set1的結果
將set1 set2的差集儲存到set3中
sdiffstore set3 set1 set2
返回set1 set2的交集
sinter set1 set2
將交集儲存到set3
sinterstore set3 set1 set2
並集
sunion set1 set2
將並集儲存到set3
sunionstore set3 set1 set2
將value從set1移動到set2
smove set1 set2 value
返回set中元素數量
scard set
判斷value是否是set中元素
sismember set value
隨機獲取set值
srandmember set
Sorted sets型別 : zset
set基礎上新增了順序屬性,zset會按新的值調整順序,可以理解為有兩列的資料庫表,一列為value,一列為排序數值。
zset每個元素會關聯一個double型別的score。
sorted set是skip list和hash table的混合體
在索引位置新增值value
zadd zest index value
移除value
zrem zest value
自增
zincrby zset number value
如果value存在於zset中,其score值增加number
如果value不存在,在zset中增加value,其score值為number
獲取序列編號
zrank zset value
返回value在zset中的序列(按score升序排列),即索引(下標)
獲取反向序列編號
zrevrank zset value
返回value在zset中的序列(按score降序排列),即索引(下標)
獲取反向序列編號
zrevrange zset index1 index2 [withscores]
將zset按照score值降序排列,區間為index1至index2,with scores控制是否顯示score值
(測試不通過)
返回給定socre區間元素數量
zcount zset score1 score2
返回給定的value的score值
zscore zset value
移除給定的索引區間的元素
zremrangebyrank zset index1 index2
移除給定的score區間的元素
zremrangebyscore zset score1 score2
Redis常用命令
鍵值相關命令
返回滿足給定的pattern的所有key,如keys , keys mylist
keys [pattern]
確認一個key是否存在
exists key
移除一個key
del key
設定過期時間
expire key number
給key設定一個過期時間number,單位秒,ttl key顯示剩餘時間,過期後值為-2
設定永不過期
persist key
將expire過程中的key持久化,變成不會不過期狀態,持久化之後,執行ttl key值為-1
重新命名key
rename key new_name
返回key的資料型別
type key
將key移動到其他庫
move key schema
伺服器命令
測試連線是否存活,如果是,返回PONG
ping
列印內容
echo string
選擇資料庫,編號0-15
select number
退出連線
quit
返回當前資料庫key的數目
dbsize
獲取伺服器資訊和統計
info
獲取伺服器配置資訊
config get attribute
檢視全部配置
config get *
清空當前資料庫
flushdb
清空所有庫
flushall
高階實用特性
1.安全性,設定密碼
2.主從複製
master可以有多個slave,slave還可以連線到其他slave。
主從複製不會阻塞master,在資料同步時,master可以繼續處理client請求。
3.事務控制
開啟事務
multi
執行事務,提交
exec
事務回滾
discard
注意:redis 部分事務失敗,不會回滾全部事務
樂觀鎖
watch key
4.持久化機制
快照方式 snapshotting
(1)自動儲存快照
配置資訊:
save 900 1 #如果900秒內超過1個key被修改,則發起快照儲存
save 300 10 #如果300秒內超過1個key被修改,則發起快照儲存
save 60 10000 …
過程:
1. redis呼叫fork,為主程式(父程式)建立一個子程式
2. 父程式繼續處理client請求,子程式將記憶體內容寫入臨時檔案。子程式地址空間內的資料是fork時的整個資料庫的快照。子程式不會影響父程式處理client請求。
3.當子程式將快照寫入臨時檔案完畢後,用臨時檔案替換原來的快照檔案,然後子程式退出。
(2)save / bgsave
手動儲存快照,在主執行緒中完成快照儲存,會阻塞所有的client請求。
每次都是將記憶體資料完整的寫入到磁碟,如果資料量大,會引起大量的IO操作,影響效能。
Append-only file方式
記錄每次write的操作內容
比快照方式更好
5.釋出及訂閱訊息pub/sub
訂閱tv1
client1: subscribe tv1
訂閱tv2
client2: subscribe tv1 tv2
釋出tv1訊息,client1 client2收到訊息
client3: publish tv1 program1
釋出tv2訊息,client2收到訊息
client3:publish tv2 program2
批量訂閱tv開頭的頻道內容
psubscribe tv*
6.Pipeline批量傳送請求
可以將多個命令放到一個tcp報文一起傳送、返回。