https://github.com/Haiyoung/learning-and-preparing-for-interview/blob/dev/redis.md
Redis hash 命令
- HSET key field value 將哈希表 key 中的字段 field 的值設爲 value
- HGET key field 獲取存儲在哈希表中指定字段的值
- HMSET key field1 value1 [field2 value2 ] 同時將多個 field-value (域-值)對設置到哈希表 key 中
- HGETALL key 獲取在哈希表中指定 key 的所有字段和值
- HSETNX key field value 只有在字段 field 不存在時,設置哈希表字段的值
- HKEYS key 獲取所有哈希表中的字段
- HVALS key 獲取哈希表中所有值
python
redis-S:6379> hset hashTest id dog
(integer) 1
redis-S:6379> hget hashTest id
"dog"
redis-S:6379> hmset hashTest name dog_1 food bond_1
OK
redis-S:6379> hgetall hashTest
1) "id"
2) "dog"
3) "name"
4) "dog_1"
5) "food"
6) "bond_1"
redis-S:6379> hsetnx hashTest id cat
(integer) 0
redis-S:6379> hgetall hashTest
1) "id"
2) "dog"
3) "name"
4) "dog_1"
5) "food"
6) "bond_1"
redis-S:6379> hkeys hashTest
1) "id"
2) "name"
3) "food"
redis-S:6379> hvals hashTest
1) "dog"
2) "dog_1"
3) "bond_1"
redis-S:6379>
- HLEN key 獲取哈希表中字段的數量
- HDEL key field1 [field2] 刪除一個或多個哈希表字段
- HEXISTS key field 查看哈希表 key 中,指定的字段是否存在
- HMGET key field1 [field2] 獲取所有給定字段的值
python
redis-S:6379> keys *
1) "hashTest"
redis-S:6379> hlen hashTest
(integer) 3
redis-S:6379> hdel hashTest id
(integer) 1
redis-S:6379> hlen hashTest
(integer) 2
redis-S:6379> hgetall hashTest
1) "name"
2) "dog_1"
3) "food"
4) "bond_1"
redis-S:6379> hexists hashTest id
(integer) 0
redis-S:6379> hexists hashTest name
(integer) 1
redis-S:6379> hmget hashTest name food
1) "dog_1"
2) "bond_1"
redis-S:6379>
- HINCRBY key field increment 爲哈希表 key 中的指定字段的整數值加上增量 increment
- HINCRBYFLOAT key field increment 爲哈希表 key 中的指定字段的浮點數值加上增量 increment
python
redis-S:6379> keys *
1) "hashTest"
redis-S:6379> hmset hashTest002 f1 1 f2 2 f3 3
OK
redis-S:6379> hgetall hashTest002
1) "f1"
2) "1"
3) "f2"
4) "2"
5) "f3"
6) "3"
redis-S:6379> hincrby hashTest002 f3 2
(integer) 5
redis-S:6379> hincrbyfloat hashTest002 f1 1.1
"2.1"
- HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的鍵值對
python
#SCAN 命令是一個基於遊標的迭代器(cursor based iterator): SCAN 命令每次被調用之後, 都會向用戶返回一個新的遊標, 用戶在下次迭代時需要使用這個新遊標作爲 SCAN 命令的遊標參數, 以此來延續之前的迭代過程。
#當 SCAN 命令的遊標參數被設置爲 0 時, 服務器將開始一次新的迭代, 而當服務器向用戶返回值爲 0 的遊標時, 表示迭代已結束
# match 可以返回匹配的鍵值對
# COUNT 選項的作用就是讓用戶告知迭代命令, 在每次迭代中應該從數據集裏返回多少元素
# 雖然 COUNT 選項只是對增量式迭代命令的一種提示(hint),但是在大多數情況下, 這種提示都是有效的(數據量少時不生效)
redis-S:6379> hscan hashTest002 0
1) "0"
2) 1) "f1"
2) "2.1"
3) "f2"
4) "2"
5) "f3"
6) "5"
redis-S:6379> hscan hashTest002 0 match *2
1) "0"
2) 1) "f2"
2) "2"
redis-S:6379> hscan hashTest002 0 match *2 count 3
1) "0"
2) 1) "f2"
2) "2"
redis-S:6379>
Redis list 命令
- RPUSH key value1 [value2] 在列表中添加一個或多個值
- LPUSH key value1 [value2] 將一個或多個值插入到列表頭部
- LRANGE key start stop 獲取列表指定範圍內的元素
- LPOP key 移除並獲取列表的第一個元素
- RPOP key 移除並獲取列表最後一個元素
- LPUSHX key value 將一個值插入到已存在的列表頭部
- RPUSHX key value 爲已存在的列表添加值
- LLEN key 獲取列表長度
python
redis-S:6379> keys *
(empty list or set)
redis-S:6379> rpush listTest 001
(integer) 1
redis-S:6379> lrange listTest 0 -1
1) "001"
redis-S:6379> lpush listTest 002
(integer) 2
redis-S:6379> lrange listTest 0 -1
1) "002"
2) "001"
redis-S:6379> lpop listTest
"002"
redis-S:6379> rpop listTest
"001"
redis-S:6379> lrange listTest 0 -1
(empty list or set)
redis-S:6379> keys *
(empty list or set)
redis-S:6379> lpushx listTest 003
(integer) 0
redis-S:6379> rpush listTest 001
(integer) 1
redis-S:6379> lpushx listTest 003
(integer) 2
redis-S:6379> lrange listTest 0 -1
1) "003"
2) "001"
redis-S:6379> rpushx listTest 004
(integer) 3
redis-S:6379> lrange listTest 0 -1
1) "003"
2) "001"
3) "004"
redis-S:6379> llen listTest
(integer) 3
redis-S:6379>
- LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者後插入元素(如果命令執行成功,返回插入操作完成之後,列表的長度。 如果沒有找到指定元素 ,返回 -1 。 如果 key 不存在或爲空列表,返回 0)
- LINDEX key index 通過索引獲取列表中的元素
python
redis-S:6379> lrange listTest 0 -1
1) "003"
2) "001"
3) "004"
redis-S:6379> lindex listTest 1
"001"
redis-S:6379> linsert listTest before "001" "009"
(integer) 4
redis-S:6379> lrange listTest 0 -1
1) "003"
2) "009"
3) "001"
4) "004"
redis-S:6379> linsert listTest after "001" "006"
(integer) 5
redis-S:6379> lrange listTest 0 -1
1) "003"
2) "009"
3) "001"
4) "006"
5) "004"
redis-S:6379>
- LREM key count value 移除列表元素
- Redis Lrem 根據參數 COUNT 的值,移除列表中與參數 VALUE 相等的元素
- count > 0 : 從表頭開始向表尾搜索,移除與 VALUE 相等的元素,數量爲 COUNT
- count < 0 : 從表尾開始向表頭搜索,移除與 VALUE 相等的元素,數量爲 COUNT 的絕對值
- scount = 0 : 移除表中所有與 VALUE 相等的值
python
redis-S:6379> lrange listTest 0 -1
1) "003"
2) "009"
3) "001"
4) "006"
5) "004"
6) "003"
7) "003"
8) "001"
9) "001"
10) "003"
redis-S:6379> lrem listTest 2 003
(integer) 2
redis-S:6379> lrange listTest 0 -1
1) "009"
2) "001"
3) "006"
4) "004"
5) "003"
6) "001"
7) "001"
8) "003"
redis-S:6379> lrem listTest 2 003
(integer) 2
redis-S:6379> lrange listTest 0 -1
1) "009"
2) "001"
3) "006"
4) "004"
5) "001"
6) "001"
redis-S:6379> lrem listTest 0 001
(integer) 3
redis-S:6379> lrange listTest 0 -1
1) "009"
2) "006"
3) "004"
redis-S:6379>
- LSET key index value 通過索引設置列表元素的值
- LTRIM key start stop 對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除
python
redis-S:6379> lrange listTest 0 -1
1) "009"
2) "006"
3) "004"
redis-S:6379> lset listTest 1 008
OK
redis-S:6379> lrange listTest 0 -1
1) "009"
2) "008"
3) "004"
redis-S:6379> ltrim listTest 1 -1
OK
redis-S:6379> lrange listTest 0 -1
1) "008"
2) "004"
redis-S:6379>
- BLPOP key1 [key2 ] timeout 移出並獲取列表的第一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素爲止
- BRPOP key1 [key2 ] timeout 移出並獲取列表的最後一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素爲止
- RPOPLPUSH source destination 移除列表的最後一個元素,並將該元素添加到另一個列表並返回
- BRPOPLPUSH source destination timeout 從列表中彈出一個值,將彈出的元素插入到另外一個列表中並返回它; 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素爲止