Redis基本命令整理

我有切糕發表於2016-02-17

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報文一起傳送、返回。

7.虛擬記憶體的使用

相關文章