doc 環境下使用命令:
keys 命令
? 匹配一個字符
* 匹配任意個(包括0個)字符
[] 匹配括號間的任一個字符,可以使用 "-" 符號表示一個范圍,如 a[b-d] 可以匹配 "ab","ac","ad"
\x 匹配字符x,用於轉義符號,如果要匹配 "?" 就需要使用 \?
判斷一個鍵值是否存在
exists key
如果存在,返回整數類型 1 ,否則返回 0
刪除鍵
del key [key.....]
可以刪除一個或多個鍵,返回值是刪除的鍵的個數
注意:不支持通配符刪除
獲得鍵值的數據類型
type key
返回值可能是 string(字符串類型) hash(散列類型) list(列表類型) set(集合類型) zset(有序集合類型)
賦值與取值
set key value 賦值
get key 取值
遞增數字
incr key
當存儲的字符串是整數形式時,redis提供了一個使用的命令 incr 作用是讓當前的鍵值遞增,並返回遞增后的值
incr num
當要操作的鍵不存在時會默認鍵值為 0 ,所以第一次遞增后的結果是 1 ,當鍵值不是整數時 redis會提示錯誤
增加指定的整數
incrby key increment
incrby 命令與 incr 命令基本一樣,只不過前者可以通過 increment 參數指定一次增加的數值如:
incrby num 2
incrby num 3
減少指定的整數
decr key
decrby key increment
desc 命令與incr 命令用法相同,只不過是讓鍵值遞減
decrby 命令與 incrby命令用法相同
增加指定浮點數
incrbyfloat key increment
incrbyfloat 命令類似 incrby 命令,差別是前者可以遞增一個雙精度浮點數,如:
incrbyfloat num 2.7
注意: ( 受reids 版本限制,版本需要大於 2.6 版本)
向尾部追加值
append key value
作用是向鍵值的末尾追加 value ,如果鍵不存在則將改鍵的值設置為 value,即相當於 set key value。返回值是追加后字符串的長度
如:append foo " hello word!"
獲取字符串長度
strlen key
返回鍵值的長度,如果鍵不存在則返回0
同時 獲得/設置 多個鍵值
mget key [key.....]
mset key value [key value .......]
位操作
getbit key offset
setbit key offset value
bitcount key [strart] [end]
bitop operation destkey key [key .....]
一個字節由8個二進制位組成,redis 提供了4個命令直接對二進制位進行操作
getbit 命令可以獲得一個字符串類型鍵指定位置的二進制位的值(0 或 1),索引從 0 開始,如果需要獲取的二進制位的索引超出了鍵值
的二進制位的實際長度則默認位值是 0
setbit 命令可以設置字符串類型鍵指定位置的二進制位的值,返回值是該位置的舊值,如果需要設置的位置超過了鍵值的二進制位的長
度,setbit 命令會自動將中間的二進制位設置為0,同理設置一個不存在的鍵的指定二進制位的值會自動將其前面的位賦值為 0
bitcount 命令可以獲得字符串類型鍵中值是1的二進制位個數,可以通過參數來限制統計的字節范圍,如我們希望統計前兩個字節(即
"aa") 命令:bitcount foo 0 1
注意: ( 受reids 版本限制,版本需要大於 2.6 版本)
bittop 命令可以對多個字符串類型鍵進行位運算,並將結果存儲在destkey參數指定的鍵中。該命令支持的運算操作有 AND、 OR、
XOR、 NOT,
如我們對bar 和 aar 進行 OR 運算操作:
set foo1 bar
set foo2 aar
bitop OR res foo1 foo2
get res
注: ( 受reids 版本限制,版本需要大於 2.6 版本)
散列類型
賦值與取值
hset key field value
hget key field
hmset key field value [ field value ...... ]
hmget key field [ field ...... ]
hgetall key
hset 命令用來給字段賦值,而hget命令用來獲得字段的值
hset 命令的方便之處在於不區分插入和更新操作,這意味着修改數據時不用事先判斷字段是否存在來決定要執行的是插入操作還是更新操
作,
當執行的是插入操作時, hset 命令返回 1 ,當執行的是更新操作時,hset 命令返回的是 0 ,當鍵本身不存在時, hset 命令還會
自動建立他
hmset 設置多個鍵值
hmget 獲得多個鍵值
hgetall 獲取鍵中所有字段和字段值卻不知道鍵中有哪些字段時使用,返回的結果是字段和字段值組成的列表
判斷字段是否存在
hexists key field
存在返回 1 ,否則返回 0
當字段不存在時賦值
hsetnx key field value
hsetnx 命令與hset 命令類似,區別在於如果字段已經存在,hsetnx 命令將不執行任何操作
增加數字
hincrby key field increment
使字段值增加指定的整數
刪除字段
hdel key field [ field .....]
刪除一個或多個字段,返回值是被刪除的字段個數
只獲取字段名或字段值
hkeys key
hvals key
hkeys 獲取所有字段的名字
hvals 獲得鍵中所有字段的值
獲得字段數量
hlen key
列表類型
向列表兩端增加元素
lpush key value [ value ....... ]
rpush key value [ value ....... ]
lpush 命令用來向列表左邊增加元素,返回表示增加元素后列表的長度
rpush 命令用來向列表右邊增加元素,返回表示增加元素后列表的長度
從列表兩端彈出元素
lpop key
rpop key
lpop 命令可以從列表左邊彈出一個元素,lpop 命令執行兩步操作,1:將列表左邊的元素從列表中移除,2:返回被移除元素值
rpop 命令可以從列表右邊彈出一個元素
獲取列表中元素個數
llen key
當鍵不存在時,llen 返回 0
獲得列表片段
lrange key start stop
獲得列表中的某一片段,返回索引從 start 到 stop 之間的所有元素(包括兩端的元素) 索引開始為 0
注:lrange 與很多語言中用來截取數組片段的方法有一點區別是 lrange 返回的值包含最右邊的元素
lrange 命令也支持負索引,表是從右邊開始計算序數,如 ' -1 ' 表示最右邊第一個元素, ' -2 ' 表示最右邊第二個元素,一次類推
刪除列表中指定的值
lrem key count value
lrem 命令會刪除列表中前 count 個值為 value 的元素,返回值是實際刪除的元素個數。根據count 值的不同,lrem 命令執行的方式會
略有差異
當 count > 0 時,lrem 命令會從列表左邊開始刪除前 count 個值為 value 的元素
當 count < 0 時,lrem 命令會從列表右邊開始刪除前count 個值為 value 的元素
當 count = 0 時,lrem 命令會刪除所有值為value的元素
獲得 / 設置 指定索引的元素值
lindex key index
lset key index value
lindex 命令用來返回指定索引的元素,索引從 0 開始 ,如果 index 是負數則表示從右邊開始計算的索引,最右邊元素的索引是 -1
lset 是通過索引操作列表的命令,它會將索引為 index 的元素賦值為 value
只保留列表指定片段
ltrim key start end
ltrim 命令可以刪除指定索引范圍之外的所有元素,其指定列表范圍的方法和 lrange 命令相同
ltrim 命令常和 lpush 命令一起使用來限制列表中元素的數量,比如記錄日志時我們希望只保留最近的 100 條日志,則每次加入新元素時
調用一次ltrim 命令即可;
向列表中插入元素
linsert key before | after pivot value
linsert 命令首先會在列表中從左到右查找值為 pivot 的元素,然后根據第二個參數是 before 還是 after 來決定將 value 插入到該元素的
前面還是后面,如果命令執行成功,返回插入操作完成之后列表的長度。如果沒有找到 pivot 返回 -1 如果key 不存在或為空,返回 0
將元素從一個列表轉到另一個列表R
rpoplpush source destination
rpoplpush 先執行 rpop 命令在執行 lpush 命令。rpoplpush 命令先會從source 列表類型鍵的右邊彈出一個元素,然后將其加入到 destination 列表類型鍵的左邊,並返回這個元素的值,整個過程是原子的
集合類型
增加刪除命令
sadd key member [ member .... ]
srem key member [ member .... ]
sadd 命令用來向集合中增加一個或多個元素,如果鍵不存在則會自動創建。因為在一個集合中不能有相同的元素,所以如果要加入的元
素已經存在與集合中就會忽略這個元素。返回值是成功加入的元素數量(忽略的元素不計算在內)
srem 命令用來從集合中刪除一個或多個元素,並返回刪除成功的個數
獲得集合中的所有元素
smembers key
返回集合中的所有元素
判斷元素是否在集合中
sismember key member
判斷一個元素是否在集合中是一個時間復雜度為 0(1) 的操作,無論集合中有多少個元素, sismember 命令始終可以極快的返回結果。當
值存在時 sismember 命令返回 1 ,當值不存在或者鍵不存在時返回 0
集合間運算
sdiff key [ key ...... ]
sdiff 命令用來對多個集合執行差集運算。集合 A 與集合 B 的差集表示為 A- B ,代表所有屬於 A 且不屬於 B 的元素構成的集合,即
A - B = { x| x∈A 且 x ∈/B }

命令使用方法:
sadd seta 1 2 3 4 6 7 8
sadd setb 2 3 4
sdiff seta setb
該命令支持同時傳入多個鍵, 計算順序是先計算 seta 和 setb 在計算結果與 setc 的差集
sadd setc 2 3 4
sdiff seta setb setc
sinter key [ key ..... ]
該命令用來對多個集合執行交集運算。集合 A 與集合 B 的交集表示為 A∩B,代表所有屬於 A 且屬於 B 的元素構成的集合
即 A∩B = { x| x∈A 且 x ∈B }

命令使用方法:
sinter seta setb
該命令同樣支持同時傳入多個鍵
sunion key [ key ...... ]
該命令用來對多個集合執行並集運算。集合 A 與集合 B的並集表示為 A∪B ,代表所有屬於A或所有屬於B的元素構成的集合
即 A∪B = { x| x∈A 或 x ∈B }

命令使用方法:
sunion seta setb
該命令同樣支持同時傳入多個鍵
獲得集合中元素的個數
scard key
進行集合運算並將結果存儲
sdiffstore destination key [ key ...... ]
sinterstore destination key [ key ...... ]
sunionstore destination key [ key ...... ]
sdiffstore 命令和 sdiff 命令功能一樣,唯一的區別就是前者不會直接返回運算的結果,而是將結果存在 destination 鍵中
sinterstore 這個命令類似於 sinter 命令,但它將結果保存到 destination 集合,而不是簡單地返回結果集。
sunionstore 這個命令類似於 sunion 命令,但它將結果保存到 destination 集合,而不是簡單地返回結果集。
隨機獲得集合中的元素
srandmember key [ count ]
該命令用來隨機從集合中獲取一個元素
還可以傳遞 count 參數來一次隨機獲得多個元素,根據 count 的正負不同,具體表現也不同
當count 為正數時,srandmember 會隨機獲取從集合里獲得 count 個不重復的元素。如果 count 的值大於集合中的元素個數,則
srandmember 會返回集合中的全部元素
當 count 為負數時,srandmember 會隨機從集合中獲得 |count| 個的元素,這些元素有可能相同
注:當傳遞count 參數時,在windows環境下提示命令參數錯誤
從集合中彈出一個元素
spop key
由於集合類型的元素是無序的,所以 spop 命令會從集合中隨機選擇一個元素彈出,返回值為被移除的隨機元素,如果 key 不存在或者
key 為空集時,返回 nil
有序集合類型(sorted set)
增加元素
zadd key score member [ score member ...... ]
zadd 命令用來向有序集合中加入一個元素和該元素的分數,如果該元素已經存在,則會用新的分數替換原有的分數。zadd命令的返回
值是新加入到集合中的元素個數(不包含之前已經存在的元素)
獲得元素的分數
zscore key member
獲得排名在某個范圍的元素列表
zrange key start stop [ withscores ]
zrevrange key start stop [ withscores ]
zrange 命令會按照元素分數從小到大的順序返回索引從 start 到 stop 之間的所有元素(包含兩端的元素)。zrange 命令和 lrange 命
令十分相似,如索引都是從0開始,負數代表從后向前查找(-1 表示最后一個元素)。如果需要同時獲得元素的分數的話,可以在
zrange 命令的尾部加上 widthscores 參數
注:如果兩個元素的分數相同,redis會按照字典順序(即 0<9<A<Z<a<z 這樣的順序)來進行排列。如果元素的值是中文,則取決於
中文的編碼方式,如圖:

zrevrange 命令和 zrange 的唯一不同在於 zrevrange 是按照元素分數從大到小的順序給定結果的
獲得指定分數范圍內的元素
zrangebyscore key min max [ withscores ] [ limit offset count ]
該命令按照元素分數從小到大的順序返回分數在 min 到 max 之間(包含 min 和max 的元素)
如果希望分數范圍不包含端點值,可以在分數前加上 "(" 符號,例如:希望返回80分到100分的的數據,可以包含80分單不包含100分
命令:zrangebyscore scoreboard 80 (100 widthscores

min 和 max 還支持無窮大,同 zadd 命令一樣,-inf 和 +inf 分別表示負無窮大和正無窮大。比如希望得到所有分數高於 80分(不
包含80分)的人的名單,但是卻不知道最高分是多少,這是就可以使用 +inf
zrangebyscore scoreboard (80 +inf
命令 limit offset count 與 SQL 中的用法基本相同,即在獲得的元素列表的基礎上向后偏移 offset 個元素並且只獲取前count個元
素

zrevrangebyscore 不僅是按照元素分數從大往小的順序給出結果,而且他的 min 和max 的參數的順序和 zrangebyscore 命令是相
反的

增加某個元素的分數
zincrby key increment member
zincrby 命令可以增加一個元素的分數,返回值是更改后的分數,例如想給peter 加 4 分
zincrby scoreborder 4 peter
increment 也可以是負數表示減分
zincrby scoreborder -4 peter
如果指定元素不存在,redis 在執行命令前會先建立它並將他的值賦為0在執行操作
獲得集合中元素的數量
zcard key
獲得指定分數范圍內的元素個數
zcount key min max
zcount 命令的 min max 參數的特性與 zrangebyscore 命令中的一樣

刪除一個或多個元素
zrem key member [ member .... ]
zrem 命令的返回值是成功刪除的元素數量(不包含本來就不存在的元素)
按照排名范圍刪除元素
zremrangebyrank key start stop
按照元素分數從小到大的順序(即索引 0 表示最小的值)刪除在指定排名范圍內的所有元素,並返回刪除元素的數量

按照分數范圍刪除元素
zremrangebyscore key min max
zremrangebyscore 命令刪除指定分數范圍內的所有元素,參數 min 和 max 的特性和 zrangebyscore 命令中的一樣,返回值是刪除
元素的個數

獲得元素的排名
zrank key member
zrevrank key member
zrank 命令會按照元素分數從小到大的順序獲得指定的元素排名(從 0 開始,即分數最小的元素排名為0)

zrebrank 命令則正好相反,分數最大的元素排名為0
計算有序集合的交集
zinterstore destination numkeys key [ key ... ] [ weights weight [ weight ... ] ] [ aggregate SUM | MIN | MAX ]
zinterstore 命令用來計算多個有序集合的交集病將結果存儲在 destination 鍵中(同樣以有序集合類型存儲),返回值為 destination
鍵中元素的個數,destination 鍵中元素的分數是由 aggregate 參數決定的
1. 當 aggregate 是 SUM (也就是默認值),destination 鍵中元素的分數是每個參與計算的集合中該元素分數的和

2.當 aggregate 是 MIN 時,destination 鍵中元素的分數是參與計算的集合中該元素分數最小值

3.當 aggregate 是 MAX 是,destination 鍵中元素的分數是參與計算的集合中該元素分數最大值
zinterstore 命令還能通過 weights 參數設置每個集合的權重,每個集合在參與計算時元素的分數會被乘上該集合的權重
如:

計算集合間的並集
zunionstore
用法與 zinterstore 命令的用法一樣
事務
事務的原理是先將屬於一個事務的命令發送給redis ,然后再讓 redis 依次執行這些命令

錯誤處理
(1)語法錯誤。語法錯誤指命令不存在或者命令參數個數不對。這種情況下,事務中只要有一個命令有語法錯誤,執行exec命令后redis
就會直接返回錯誤,連語法正確的命令也不會執行
注:redis 2.6.5 之前的版本會忽略有語法錯誤的命令,然后執行事務中其他語法正確的命令。
(2)運行錯誤。運行錯誤指在命令執行時出現的錯誤,比如使用散列類型的命令操作集合類型的鍵,這種錯誤在實際執行之前redis是無
法發現的,所以在事務里這樣的命令是會被redis接受並執行的,如果事務里的一條命令出現運行錯誤,事務里其他的命令依然會繼
續執行(包含出錯命令之后的命令)
reids的事務沒有關系數據庫事務提供的回滾功能,為此開發者必須在事務執行出錯之后自己收拾剩下的攤子
watch 命令
watch key [ key ... ]
監視一個或多個 key ,如果在事務執行之前這個或這些 key 被其他命令所改動,那么事務將被打斷,監控一直持續到exec命令

unwatch
取消 watch 命令對所有 key 的監視
生存時間
expire
expire 命令的使用方法為 expire key seconds ,其中 seconds 參數表示鍵的生存時間,單位是秒,該參數必須是整數

命令返回 1表示設置成功,返回 0 則表示鍵不存在或設置失敗
如果想知道一個鍵還有多久會被刪除,可以使用 ttl 命令。返回值是鍵的剩余時間(單位是秒),

如果想取消鍵的生存時間設置(即將鍵恢復成為永久的),可以使用 persist 命令。如果生存時間被成功清除則返回 1 。否則返回 0

除了 persist 命令之外,使用 set 、getset 命令為鍵賦值也同時會清楚鍵的生存時間
注: incr 、lpush、hset、zrem 命令均不會影像鍵的生存時間
精確控制鍵的生存時間應該使用 pexpire 命令。該命令的單位是毫秒
可以使用 pttl 命令以毫秒為單位返回鍵的剩余時間
另外不太常用命令:expireat 和 pexpireat,該命令第二個參數表示鍵的生存時間的截至時間,expireat 單位秒 pexpireat 單位毫秒
sort
該命令可以對列表類型,集合類型,和有序集合類型鍵進行排序
列表類型:

有序集合類型排序時,會忽略元素的分數,只針對元素的自身的值進行排序

除了可以排列數字外,sort 命令還可以通過 alpha 參數實現按照字典順序排列非數字元素

sort 命令的 desc 參數可以實現將元素按照從大到小的順序排列
sort 命令還支持 limit 參數來返回指定范圍的結果,用法和sql 語句一樣 limit offset count ,表示跳過前 offset 個元素並獲取之后的
count 個元素

sort 命令 by 參數,默認情況下, sort uid 直接按照 uid 中的值排序,通過 by 參數,可以讓 uid 按照其他鍵的元素來排序

user_level_* 是一個占位符,他先取出 uid 中的值,然后在用這個值來查找相應的鍵
比如在對 uid 列表進行排序時, 程序就會先取出 uid 的值 1 、 2 、 3 、 4 , 然后使用 user_level_1 、 user_level_2 、 user_level_3
和 user_level_4 的值作為排序 uid 的權重。
使用 get 選項,可以根據排序的結果來取出相應的鍵值

一個sort 命令中可以有多個 get 參數(而 by 參數只能有一個)

默認情況下 sort 命令會直接返回排序結果,如果希望保存排序結果,可以使用 store 參數,保存后鍵的類型為列表類型

以上僅為個人在學習過程中記錄的,有關注的可以加微信共同討論一下!