redis常用命令
1. 資料型別
-
string
-
hash
-
-
set
-
sortedset/zset
2. 操作命令
2.1 操作 string
2.1.1 string 基礎操作
新增/修改資料
語法: set key value 示例: 127.0.0.1:6379> set username zhangsan OK
獲取資料
語法: get key 示例: 127.0.0.1:6379> get username "zhangsan"
刪除資料
語法: del key 示例: 127.0.0.1:6379> del username (integer)1
判定性新增資料(key不存在才新增)
語法: setnx key value 示例: 127.0.0.1:6379> setnx username zhangsan (integer) 1 127.0.0.1:6379> setnx username lisi (integer) 0
新增/修改多個數據
語法: mset key1 value1 key2 value2 … 示例: 127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 OK
獲取多個數據
語法: mget key1 key2 … 示例: 127.0.0.1:6379> mget k1 k2 k31) "v1" 2) "v2" 3) "v3"
獲取資料的字元個數(字串長度)
語法: strlen key 示例: 127.0.0.1:6379> strlen username (integer) 8 127.0.0.1:6379> strlen k1 (integer) 2
追加字元到原始字串後面(如果原始字串存在就追加,否則新建)
語法: append key value 示例: 127.0.0.1:6379> append username 1 (integer) 9 127.0.0.1:6379> get username "zhangsan1" 127.0.0.1:6379> append password 123 (integer) 3 127.0.0.1:6379> get password "123"
2.1.2 string 擴充套件操作
設定整形數值資料自增(預設自增1)
語法: incr key 示例: 127.0.0.1:6379> set num 1 OK 127.0.0.1:6379> incr num (integer) 2 127.0.0.1:6379> incr num (integer) 3
設定整形數值資料增加指定整數值
語法: incrby key increment 示例: 127.0.0.1:6379> incrby num 10 (integer) 13
設定資料資料增加指定小數值
語法: incrbyfloat key increment 示例: 127.0.0.1:6379> incrbyfloat num 1.5 "14.5"
設定整形數值資料自減(預設自減1)
語法: decr key 示例: 127.0.0.1:6379> set num2 10 OK 127.0.0.1:6379> decr num2 (integer) 9
設定設定整形數值資料減小指定值
語法: decrby key decrement 示例: 127.0.0.1:6379> decrby num2 2 (integer) 7
設定資料的有效時長(支援自動過期)
1.單位為秒 語法: setex key seconds value 示例: 127.0.0.1:6379> setex code 10 abcd OK 10秒內獲取 127.0.0.1:6379> get code "abcd" 10秒後獲取 127.0.0.1:6379> get code (nil) 2.單位為毫秒 語法: psetex key milliseconds value 使用方式一致,不再演示
2.2 操作 hash
2.2.1 hash 基礎操作
新增、修改資料
語法1-新增單個: hset key field value 示例: 127.0.0.1:6379> hset user:001 name zhangsan (integer) 1 語法2-批量新增: hmset key field1 value1 field2 value2 … 示例: 127.0.0.1:6379> hmset user:001 password 123 age 18 OK 語法3-判定性設定field的值,如果該field存在則不做任何操作: hsetnx key field value 示例: 127.0.0.1:6379> hsetnx user:001 name lisi (integer) 0
根據key和field獲取單個vlaue
語法: hget key field 示例: 127.0.0.1:6379> hget user:001 name "zhangsan"
根據key獲取所有的field和value
語法: hgetall key 示例: 127.0.0.1:6379> hgetall user:001 1) "name" 2) "zhangsan" 3) "password" 4) "123" 5) "age" 6) "18"
刪除資料
語法: hdel key field1 [field2 field3...] 示例: 127.0.0.1:6379> hdel user:001 name (integer) 1 127.0.0.1:6379> hdel user:001 password age (integer) 2
根據key獲取field的數量
語法: hlen key 示例: 127.0.0.1:6379> hmset user:001 name zhangsan password 123 age 18 OK 127.0.0.1:6379> hlen user:001 (integer) 3
判斷指定field是否存在
語法: hexists key field 示例: 127.0.0.1:6379> hexists user:001 name (integer) 1 127.0.0.1:6379> hexists user:001 name111 (integer) 0
2.2.2 hash 擴充套件操作
根據key獲取所有的欄位名field
語法: hkeys key 示例: 127.0.0.1:6379> hkeys user:001 1) "name" 2) "password" 3) "age"
根據key獲取所有的欄位值value
語法: hvals key 示例: 127.0.0.1:6379> hvals user:001 1) "zhangsan" 2) "123" 3) "18"
設定指定欄位的數值資料增加指定範圍的值
語法: hincrby key field increment hincrbyfloat key field increment 示例: 127.0.0.1:6379> hget user:001 age "18" 127.0.0.1:6379> hincrby user:001 age 1 (integer) 19 127.0.0.1:6379> hincrby user:001 age -2 (integer) 17
2.3 操作list
2.3.1 list 基礎操作
新增資料
-
從左側新增
語法: lpush key value1 [value2 value3...] 示例: 127.0.0.1:6379> lpush list1 a b c (integer) 3
當前資料為: c b a
-
從右側新增
語法: rpush key value1 [value2 value3...] 示例: 127.0.0.1:6379> rpush list1 d e f (integer) 6
當前資料為: c b a d e f
獲取資料
-
範圍獲取
語法: lrange key start stop 示例1: 127.0.0.1:6379> lrange list1 0 -1 1) "c" 2) "b" 3) "a" 4) "d" 5) "e" 6) "f" 示例2: 127.0.0.1:6379> lrange list1 0 2 1) "c" 2) "b" 3) "a" 示例3: 127.0.0.1:6379> lrange list1 -3 -1 1) "d" 2) "e" 3) "f"
索引規則:
-
從左到右,索引分別為0、1、2、3、4...
如:c(0) b(1) a(2) d(3) e(4) f(5)
-
從右到左,索引分別為 -1、-2、-3、-4...
如:c(-6) b(-5) a(-4) d(-3) e(-2) f(-1)
-
獲取指定索引的value
語法: lindex key index 示例: 127.0.0.1:6379> lindex list1 0 "c" 127.0.0.1:6379> lindex list1 1 "b" 127.0.0.1:6379> lindex list1 -1 "f"
-
移除並返回最左側或最右側的元素
語法: lpop key rpop key 示例: 127.0.0.1:6379> lpop list1 "c" 127.0.0.1:6379> rpop list1 "f"
-
根據key獲取value的個數
語法: llen key 示例: 127.0.0.1:6379> llen list1 (integer) 4
2.3.2 list 擴充套件操作
刪除指定key中指定數量的field
語法: lrem key count value 示例: 127.0.0.1:6379> rpush list2 a b b b b c d d d d (integer) 10 127.0.0.1:6379> lrem list2 4 b (integer) 4 127.0.0.1:6379> lrange list2 0 -1 1) "a" 2) "c" 3) "d" 4) "d" 5) "d" 6) "d" 127.0.0.1:6379> lrem list2 5 d (integer) 4 127.0.0.1:6379> lrange list2 0 -1 1) "a" 2) "c"
規定時間內獲取並移除資料
語法: blpop key1 [key2 key3...] timeout brpop key1 [key2 key3...] timeout 示例: 127.0.0.1:6379> lpush a a1 (integer) 1 127.0.0.1:6379> lpush b b1 (integer) 1 127.0.0.1:6379> lpush c c1 (integer) 1 127.0.0.1:6379> blpop a b c 5 1) "a" 2) "a1" 127.0.0.1:6379> blpop a b c 5 1) "b" 2) "b1" 127.0.0.1:6379> blpop a b c 5 1) "c" 2) "c1" 127.0.0.1:6379> blpop a b c 5 (nil) (5.76s)
最後一次沒有獲取到資料,但是如果在等待的5秒中之內,另一個連線向 a b c 任意一個key中存入了value,則可以獲取到資料,操作如下:
-
在當前連線視窗中執行指定時間內獲取命令,命令會處於等待狀態
127.0.0.1:6379> blpop a b c 20 |
-
開啟一個新的客戶端視窗,20秒之內在新連線視窗中向a或b或c中存入資料
127.0.0.1:6379> lpush a a1 (integer) 1
-
視窗1會立馬獲取到最新存入的資料
127.0.0.1:6379> blpop a b c 20 1) "a" 2) "a1" (3.05s)
規定時間內取出一個list的尾部元素並新增到另一個list的頭部
語法: brpoplpush source destination timeout source:被移除的list destination:要新增的list 示例: 127.0.0.1:6379> rpush list3 a b c (integer) 3 127.0.0.1:6379> lrange list3 0 -1 1) "a" 2) "b" 3) "c" 127.0.0.1:6379> rpush list4 aa bb cc (integer) 3 127.0.0.1:6379> lrange list4 0 -1 1) "aa" 2) "bb" 3) "cc" 127.0.0.1:6379> brpoplpush list3 list4 10 "c" 127.0.0.1:6379> lrange list3 0 -1 1) "a" 2) "b" 127.0.0.1:6379> lrange list4 0 -1 1) "c" 2) "aa" 3) "bb" 4) "cc"
2.4 操作 set
2.4.1 set 基礎操作
新增資料
語法: sadd key member1 [member2...] 示例: 127.0.0.1:6379> sadd set1 a a b c d (integer) 4
獲取全部資料
語法: smembers key 示例: 127.0.0.1:6379> smembers set1 1) "a" 2) "d" 3) "c" 4) "b"
刪除資料
語法: srem key member1 [member2...] 示例: 127.0.0.1:6379> srem set1 a b (integer) 2 127.0.0.1:6379> smembers set1 1) "d" 2) "c"
獲取member元素的個數
語法: scard key 示例: 127.0.0.1:6379> scard set1 (integer) 2
判斷集合中是否包含指定資料
語法: sismember key member 示例: 127.0.0.1:6379> sismember set1 d (integer) 1 127.0.0.1:6379> sismember set1 ddd (integer) 0
隨機獲取集合中[指定數量]的資料
語法: srandmember key [count] 示例: 127.0.0.1:6379> sadd set2 a b c d e f g h i (integer) 9 127.0.0.1:6379> srandmember set2 "b" 127.0.0.1:6379> srandmember set2 "b" 127.0.0.1:6379> srandmember set2 "h" 127.0.0.1:6379> srandmember set2 "e" 127.0.0.1:6379> 127.0.0.1:6379> srandmember set2 3 1) "f" 2) "e" 3) "h" 127.0.0.1:6379> srandmember set2 3 1) "d" 2) "c" 3) "i" 127.0.0.1:6379> srandmember set2 3 1) "e" 2) "h" 3) "g"
隨機移除並返回集合中的某個資料
語法: spop key 示例: 127.0.0.1:6379> spop set2 "i" 127.0.0.1:6379> spop set2 "d" 127.0.0.1:6379> smembers set2 1) "a" 2) "h" 3) "f" 4) "b" 5) "e" 6) "g" 7) "c"
2.4.1 set 擴充套件操作
求多個集合的交、並、差集
-
交集
語法: sinter key1 [key2 …] 示例: 127.0.0.1:6379> sadd s1 a b c d e f (integer) 6 127.0.0.1:6379> sadd s2 a bb c dd e ff (integer) 6 127.0.0.1:6379> sinter s1 s2 1) "c" 2) "a" 3) "e"
-
並集
語法: sunion key1 [key2 …] 示例: 127.0.0.1:6379> sunion s1 s2 1) "f" 2) "dd" 3) "b" 4) "a" 5) "d" 6) "bb" 7) "e" 8) "c" 9) "ff"
-
差集
語法: sdiff key1 [key2 …] 示例: 127.0.0.1:6379> sdiff s1 s2 1) "f" 2) "d" 3) "b" 127.0.0.1:6379> sdiff s2 s1 1) "ff" 2) "dd" 3) "bb"
求多個集合的交、並、差集並存儲到指定集合中
語法: 交集: sinterstore destination key1 [key2 …] 並集: sunionstore destination key1 [key2 …] 差集: sdiffstore destination key1 [key2 …] 示例(以交集為例,將s1和s2的交集儲存到s3中): 127.0.0.1:6379> smembers s3 (empty list or set) 127.0.0.1:6379> sinter s1 s2 1) "a" 2) "e" 3) "c" 127.0.0.1:6379> sinterstore s3 s1 s2 (integer) 3 127.0.0.1:6379> smembers s3 1) "e" 2) "a" 3) "c"
將指定資料從原始集合中移動到目標集合中
語法: smove source destination member 示例(將s1中的a元素移動到s4中): 127.0.0.1:6379> smembers s4 (empty list or set) 127.0.0.1:6379> smove s1 s4 a (integer) 1 127.0.0.1:6379> smembers s4 1) "a" 127.0.0.1:6379> smembers s1 1) "e" 2) "d" 3) "c" 4) "f" 5) "b"
2.5 key 的操作
2.5.1 key 的基本操作
刪除指定key(根據key刪除任意型別資料)
語法: del key 示例1-刪除string: 127.0.0.1:6379> set aa bb OK 127.0.0.1:6379> get aa "bb" 127.0.0.1:6379> del aa (integer) 1 127.0.0.1:6379> get aa (nil) 示例2-刪除hash: 127.0.0.1:6379> hset hash1 k1 v1 (integer) 1 127.0.0.1:6379> hgetall hash1 1) "k1" 2) "v1" 127.0.0.1:6379> del hash1 (integer) 1 127.0.0.1:6379> hgetall hash1 (empty list or set) ...其它資料型別同理...
判斷key是否存在
語法: exists key 示例: 127.0.0.1:6379> set aaa bbb OK 127.0.0.1:6379> exists aaa (integer) 1 127.0.0.1:6379> exists bbb (integer) 0
獲取key的型別
語法: type key 示例: 127.0.0.1:6379> set mystring hellostring OK 127.0.0.1:6379> hset myhash k1 v1 (integer) 1 127.0.0.1:6379> type mystring string 127.0.0.1:6379> type myhash hash
對list、set中的數值資料進行排序
語法: sort key #升序 sort key desc #降序 示例: 127.0.0.1:6379> del list1 (integer) 0 127.0.0.1:6379> lpush list1 11 2 33 7 5 18 (integer) 6 127.0.0.1:6379> sort list1 1) "2" 2) "5" 3) "7" 4) "11" 5) "18" 6) "33" 127.0.0.1:6379> sort list1 desc 1) "33" 2) "18" 3) "11" 4) "7" 5) "5" 6) "2"
對list、set中的字串資料進行排序
語法: sort key alpha sort key desc alpha 示例: 127.0.0.1:6379> del list2 (integer) 0 127.0.0.1:6379> lpush list2 a b c d (integer) 4 127.0.0.1:6379> sort list2 (error) ERR One or more scores can't be converted into double 127.0.0.1:6379> sort list2 alpha 1) "a" 2) "b" 3) "c" 4) "d" 127.0.0.1:6379> sort list2 desc alpha 1) "d" 2) "c" 3) "b" 4) "a"
重新命名key
語法1-如果新的key已存在會先刪除新key然後在重新命名: rename key newkey 示例: 127.0.0.1:6379> del username (integer) 0 127.0.0.1:6379> set username zhangsan OK 127.0.0.1:6379> set username2 lisi OK 127.0.0.1:6379> rename username username2 OK 127.0.0.1:6379> get username (nil) 127.0.0.1:6379> get username2 "zhangsan" 語法2-如果新的key不存在則重新命名: renamenx key newkey 示例: 127.0.0.1:6379> set username3 wangwu OK 127.0.0.1:6379> renamenx username2 username3 (integer) 0 127.0.0.1:6379> renamenx username2 username4 (integer) 1 127.0.0.1:6379> get username4 "zhangsan"
2.5.2 key 的擴充套件操作
獲取key的有效時間
語法1-獲取秒為單位的時效: ttl key 語法2-獲取毫秒為單位的時效: pttl key 示例: 127.0.0.1:6379> del username (integer) 0 127.0.0.1:6379> set username zhangsan OK 127.0.0.1:6379> ttl username (integer) -1 127.0.0.1:6379> ttl username2 (integer) -2 127.0.0.1:6379> setex username3 30 wangwu OK 127.0.0.1:6379> ttl username3 (integer) 21 127.0.0.1:6379> pttl username3 (integer) 15840
返回-1代表key沒有設定有效時間,返回-2代表key不存在,返回正數代表剩餘有效時長
為指定key設定有效期
語法: expire key seconds pexpire key milliseconds 示例: 127.0.0.1:6379> del hash1 (integer) 0 127.0.0.1:6379> hset hash1 k1 v1 (integer) 1 127.0.0.1:6379> ttl hash1 (integer) -1 127.0.0.1:6379> expire hash1 30 (integer) 1 127.0.0.1:6379> ttl hash1 (integer) 20 127.0.0.1:6379> del hash2 (integer) 1 127.0.0.1:6379> hset hash2 k2 v2 (integer) 1 127.0.0.1:6379> ttl hash2 (integer) -1 127.0.0.1:6379> pexpire hash2 30000 (integer) 1 127.0.0.1:6379> ttl hash2 (integer) 26 127.0.0.1:6379> pttl hash2 (integer) 21380
切換key從時效性轉換為永久性
語法: persist key 示例: 127.0.0.1:6379> del username (integer) 0 127.0.0.1:6379> setex username 60 zhangsan OK 127.0.0.1:6379> ttl username (integer) 55 127.0.0.1:6379> persist username (integer) 1 127.0.0.1:6379> ttl username (integer) -1
查詢key
語法: keys pattern 示例: 127.0.0.1:6379> del username (integer) 1 127.0.0.1:6379> set username1 zhangsan1 OK 127.0.0.1:6379> set username2 zhangsan2 OK 127.0.0.1:6379> set username3 zhangsan3 OK 127.0.0.1:6379> keys * 1) "username3" 2) "username1" 3) "username2" 127.0.0.1:6379> keys username* 1) "username3" 2) "username1" 3) "username2" 127.0.0.1:6379> keys *3 1) "username3"
2.6 db 常用指令
2.6.1 存在的問題
redis在使用過程中,伴隨著操作資料量的增加,會出現大量的資料以及對應的key。這是key重名衝突的機率就比較高。要解決這個問題,除了我們在命名時儘量做到統一和規範以外,redis 自身也提供了一個解決機制。
2.6.2 解決方式
redis為每個服務提供有16個數據庫,編號從0到15,每個資料庫之間是相互獨立的。如果沒有進行過特殊設定,預設使用的是0號資料庫。
2.6.3 db 基礎操作
切換資料庫
語法: select index 示例: select 1
2.6.4 db 擴充套件操作
資料移動
語法: move key index 示例: move username 1
統計當前db中key的數量
語法: dbsize 示例: 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> dbsize (integer) 1
清除資料
語法1-清除當前db中所有資料: flushdb 語法2-清除所有db中的資料: flushall