List
列表。
应用场景
栈,队列,阻塞队列。
消息队列。
命令
lpush, rpush, lrange
lpush key value [value ...]
:向key列表的头部插入值;
rpush key value [value ...]
:向key列表的尾部插入值
lrange key a b
:查询key列表a-b的值,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 127.0.0.1:6379> lpush l1 one (integer) 1 127.0.0.1:6379> lpush l1 two (integer) 2 127.0.0.1:6379> lpush l1 three four (integer) 4 127.0.0.1:6379> lrange l1 0 -1 1) "four" 2) "three" 3) "two" 4) "one" 127.0.0.1:6379> lrange l1 0 1 1) "four" 2) "three" 127.0.0.1:6379> rpush l1 five (integer) 5 127.0.0.1:6379> lrange l1 0 -1 1) "four" 2) "three" 3) "two" 4) "one" 5) "five"
|
lpop, rpop
lpop key
:移除列表头部的元素
rpop key
:移除列表尾部的元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 127.0.0.1:6379> lrange l1 0 -1 1) "four" 2) "three" 3) "two" 4) "one" 5) "five" 127.0.0.1:6379> lpop l1 "four" 127.0.0.1:6379> rpop l1 "five" 127.0.0.1:6379> lrange l1 0 -1 1) "three" 2) "two" 3) "one"
|
lindex, llen
lindex key index
:获取key中index位置的值。
llen key
:获取列表的长度。
1 2 3 4 5 6 7 8 9
| 127.0.0.1:6379> lrange l1 0 -1 1) "three" 2) "two" 3) "one" 127.0.0.1:6379> lindex l1 2 "one" 127.0.0.1:6379> llen l1 (integer) 3
|
lrem
lrem key count value
:移除指定数量的value值。精确匹配。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 127.0.0.1:6379> lpush l1 one two three one one (integer) 5 127.0.0.1:6379> lrange l1 0 -1 1) "one" 2) "one" 3) "three" 4) "two" 5) "one" 127.0.0.1:6379> lrem l1 1 three (integer) 1 127.0.0.1:6379> lrem l1 2 one (integer) 2 127.0.0.1:6379> lrange l1 0 -1 1) "two" 2) "one"
|
ltrim key start stop
:裁剪列表,保留start-stop中的元素;
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 127.0.0.1:6379> lpush l1 one two three four five (integer) 5 127.0.0.1:6379> lrange l1 0 -1 1) "five" 2) "four" 3) "three" 4) "two" 5) "one" 127.0.0.1:6379> ltrim l1 1 3 OK 127.0.0.1:6379> lrange l1 0 -1 1) "four" 2) "three" 3) "two"
|
rpoplpush
rpoplpush source destination
:从列表source的尾部取出元素,插入到列表destination列表的尾部;
1 2 3 4 5 6 7 8 9 10 11
| 127.0.0.1:6379> lrange l1 0 -1 1) "four" 2) "three" 3) "two" 127.0.0.1:6379> rpoplpush l1 l2 "two" 127.0.0.1:6379> lrange l1 0 -1 1) "four" 2) "three" 127.0.0.1:6379> lrange l2 0 -1 1) "two"
|
lset
lset key index value
:设置index位置的值为value
- 只能设置key存在的列表,若key不存在则报错
- 不返回原值。
1 2 3 4 5 6 7 8 9 10 11 12
| 127.0.0.1:6379> lpush l1 one two three (integer) 3 127.0.0.1:6379> lrange l1 0 -1 1) "three" 2) "two" 3) "one" 127.0.0.1:6379> lset l1 1 four OK 127.0.0.1:6379> lrange l1 0 -1 1) "three" 2) "four" 3) "one"
|
linsert
linsert key BEFORE|AFTER pivot element
- 向值为pivot的位置的前面或后面插入值element。
1 2 3 4 5 6 7 8 9 10 11
| 127.0.0.1:6379> lrange l1 0 -1 1) "three" 2) "four" 3) "one" 127.0.0.1:6379> linsert l1 before four other (integer) 4 127.0.0.1:6379> lrange l1 0 -1 1) "three" 2) "other" 3) "four" 4) "one"
|
其他
- 本质为一个“链表”
- 在两边插入或改动值,效率最高!
Set
集合
set中的值不能重复。
sadd, smembers, sismember, scard
sadd key value [value ...]
:向集合添加元素
smembers key
:查看元素成员列表
sismember key value
:查询value是否为key集合的成员
scard key
:获取集合中成员数量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 127.0.0.1:6379> sadd s1 hello (integer) 1 127.0.0.1:6379> sadd s1 yn (integer) 1 127.0.0.1:6379> sadd s1 llllyn (integer) 1 127.0.0.1:6379> smembers s1 1) "yn" 2) "llllyn" 3) "hello" 127.0.0.1:6379> sismember s1 hello (integer) 1 127.0.0.1:6379> sismember s1 word (integer) 0 127.0.0.1:6379> scard s1 (integer) 3
|
srem
srem key value
:移除指定值
srandmember key count
:随机取出集合中元素,count为数量,count默认为1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 127.0.0.1:6379> smembers s1 1) "yn" 2) "llllyn" 3) "hello" 127.0.0.1:6379> srem s1 yn (integer) 1 127.0.0.1:6379> smembers s1 1) "llllyn" 2) "hello" 127.0.0.1:6379> SRANDMEMBER s1 "llllyn" 127.0.0.1:6379> SRANDMEMBER s1 "llllyn" 127.0.0.1:6379> SRANDMEMBER s1 "hello" 127.0.0.1:6379> SRANDMEMBER s1 2 1) "llllyn" 2) "hello"
|
spop
spop key [count]
:随机弹出元素,count为数量
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 127.0.0.1:6379> smembers s1 1) "llllyn" 2) "one" 3) "hello" 4) "four" 5) "three" 6) "two" 127.0.0.1:6379> spop s1 "hello" 127.0.0.1:6379> spop s1 "three" 127.0.0.1:6379> spop s1 2 1) "two" 2) "four"
|
smove
smove key1 key2 value
:将一个集合中指定的值移动到另一个集合中。
1 2 3 4 5 6 7 8 9 10 11 12
| 127.0.0.1:6379> smembers s1 1) "one" 2) "two" 127.0.0.1:6379> smembers s2 1) "three" 127.0.0.1:6379> smove s1 s2 two (integer) 1 127.0.0.1:6379> smembers s1 1) "one" 127.0.0.1:6379> smembers s2 1) "two" 2) "three"
|
sdiff, sinter, sunion
sdiff set1 set2
:获得set1与set2的差集
sinter s1 s2
:查询s1和s2的交集
sunion s1 s2
:查询s1和s2的并集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 127.0.0.1:6379> sadd s1 a b c (integer) 3 127.0.0.1:6379> sadd s2 c d e (integer) 3 127.0.0.1:6379> sdiff s1 s2 1) "b" 2) "a" 127.0.0.1:6379> sinter s1 s2 1) "c" 127.0.0.1:6379> sunion s1 s2 1) "b" 2) "c" 3) "e" 4) "a" 5) "d"
|
Hash(哈希)
key-<key-value>
key-Map
值为map集合;
hset, hget, hmget, hmset, hgetall
hset key field value
:设置值
hget key field
:获取值
hmset key field value [field value ...]
:设置多个值
hmget key field [field...]
:获取多个值
hgetall key
:获取所有值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 127.0.0.1:6379> hset h1 f1 hello (integer) 1 127.0.0.1:6379> hget h1 f1 "hello" 127.0.0.1:6379> hmset h1 f2 world f3 one f4 two OK 127.0.0.1:6379> hmget h1 f1 f2 f3 f4 1) "hello" 2) "world" 3) "one" 4) "two" 127.0.0.1:6379> hgetall h1 1) "f1" 2) "hello" 3) "f2" 4) "world" 5) "f3" 6) "one" 7) "f4" 8) "two"
|
hdel, hlen
hdel key field [field ...]
:删除指定key的field,对应value同时会消失
hlen key
:获取hash长度
1 2 3 4 5 6 7 8 9 10 11
| 127.0.0.1:6379> hdel h1 f1 f2 f3 (integer) 3 127.0.0.1:6379> hgetall h1 1) "f4" 2) "two" 127.0.0.1:6379> hlen h1 (integer) 1 127.0.0.1:6379> hset h1 f1 one f2 three (integer) 2 127.0.0.1:6379> hlen h1 (integer) 3
|
hexists key field
:判断key的field是否存在
hkeys key
:获取所有field
hvals key
:获取所有values
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 127.0.0.1:6379> hgetall h1 1) "f4" 2) "two" 3) "f1" 4) "one" 5) "f2" 6) "three" 127.0.0.1:6379> hexists h1 f1 (integer) 1 127.0.0.1:6379> hexists h1 f5 (integer) 0 127.0.0.1:6379> hkeys h1 1) "f4" 2) "f1" 3) "f2" 127.0.0.1:6379> hvals h1 1) "two" 2) "one" 3) "three"
|
hincrby, hsetnx
hincrby key field increment
:执行自增,可以指定增量
hsetnx key field value
:与set一致,不同的是仅用于“key值不存在”时,若存在则不进行
1 2 3 4 5 6 7 8 9 10
| 127.0.0.1:6379> hset h2 f1 3 (integer) 1 127.0.0.1:6379> hincrby h2 f1 10 (integer) 13 127.0.0.1:6379> hget h2 f1 "13" 127.0.0.1:6379> hsetnx h2 f2 4 (integer) 1 127.0.0.1:6379> hsetnx h2 f2 10 (integer) 0
|
技巧
对象存储
设置user的id为1的用户,name为ZhangSan,age为16。
1 2 3 4 5 6 7 8 9
| 127.0.0.1:6379> hset user:1 name ZhangSan (integer) 1 127.0.0.1:6379> hset user:1 age 16 (integer) 1 127.0.0.1:6379> hgetall user:1 1) "name" 2) "ZhangSan" 3) "age" 4) "16"
|