string常用命令
# set 在缓冲中存一个key value
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
# 从缓存了删除key
127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> get k1
(nil)
# 追加字符串
127.0.0.1:6379> append k1 23456
(integer) 7
127.0.0.1:6379> get k1
"v123456"
#求出k1对应的值的字符串长度
127.0.0.1:6379> strlen k1
(integer) 7
# INCR key 将 key 中储存的数字值增一。
127.0.0.1:6379> set k2 1
OK
127.0.0.1:6379> incr k2
(integer) 2
127.0.0.1:6379> incr k2
(integer) 3
127.0.0.1:6379> incr k2
(integer) 4
# DECR key 将 key 中储存的数字值减一。
127.0.0.1:6379> decr k2
(integer) 3
127.0.0.1:6379> decr k2
(integer) 2
127.0.0.1:6379> decr k2
(integer) 1
# INCRBY key increment 将 key 所储存的值加上给定的增量值(increment)
127.0.0.1:6379> incrby k2 3
(integer) 1
127.0.0.1:6379> incrby k2 3
(integer) 4
127.0.0.1:6379> incrby k2 3
(integer) 7
# DECRBY key decrement key 所储存的值减去给定的减量值(decrement)
127.0.0.1:6379> decrby k2 2
(integer) 5
127.0.0.1:6379> decrby k2 2
(integer) 3
127.0.0.1:6379> decrby k2 2
(integer) 1
# GETRANGE key start end 获取指定区间范围的值,返回 key 中字符串值的子字符
# 从0到-1表示全部
127.0.0.1:6379> get k1
"v123456"
127.0.0.1:6379> getrange k1 0 -1
"v123456"
127.0.0.1:6379> getrange k1 1 3
"123"
#SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
127.0.0.1:6379> get k1
"123456"
127.0.0.1:6379> setrange k1 2 abc
(integer) 6
127.0.0.1:6379> get k1
"12abc6"
# SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
127.0.0.1:6379> setrange k1 2 abc
(integer) 6
127.0.0.1:6379> get k1
"12abc6"
127.0.0.1:6379> setex k4 10 v4
OK
127.0.0.1:6379> ttl k4
(integer) 4
127.0.0.1:6379> ttl k4
(integer) 2
127.0.0.1:6379> ttl k4
(integer) -2 // -2表示过期了
# SETNX key value 只有在 key 不存在库中时才会设置 key 的值
127.0.0.1:6379> get k1 // k1存在
"12abc6"
127.0.0.1:6379> setnx k1 v1 // setnx无法设置k1
(integer) 0
127.0.0.1:6379> get k1
"12abc6"
127.0.0.1:6379> get k5 // k5不存在
(nil)
127.0.0.1:6379> setnx k5 v5 // setnx可以设置k5
(integer) 1
127.0.0.1:6379> get k5
"v5"
# MSET key value [key value …] 同时设置一个或多个 key-value 对。
# MGET key1 [key2…] 获取所有(一个或多个)给定 key 的值。
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
# MSETNX key value [key value …] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在才能设置成功。
127.0.0.1:6379> keys * // k3已存在
1) "k3"
127.0.0.1:6379> msetnx k3 v3 k4 v4 // msetnx无法设置
(integer) 0
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379> msetnx k4 v5 k5 v5 //k4 k5 都不存在,msetnx生效
(integer) 1
127.0.0.1:6379> keys *
1) "k3"
2) "k5"
3) "k4"
List常用命令
- 单值多value
# LANGE key start stop 获取列表指定范围内的元素,其中L代表的是 List
# LPUSH key value1 [value2] 将一个或多个值插入到列表头部,其中L表示Lift
# LPUSH类似于栈,先进后出,出栈和入栈都从栈顶
127.0.0.1:6379> lpush list01 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange list01 0 -1 // 遍历得出 5 ~ 1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
# RPUSH key value1 [value2] 在列表中添加一个或多个值,其中R表示Right
# RPUSH类似于队列,先进先出,队尾入队,队头出队
127.0.0.1:6379> rpush list02 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange list02 0 -1 // 遍历得出 1 ~ 5
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
# LPOP key 移出并获取列表的第一个元素
127.0.0.1:6379> lpop list01 #栈顶出
"5"
127.0.0.1:6379> lpop list02 #队头出
"1"
127.0.0.1:6379> lrange list01 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> lrange list02 0 -1
1) "2"
2) "3"
3) "4"
4) "5"
# RPOP key 移除列表的最后一个元素,返回值为移除的元素
127.0.0.1:6379> rpop list01 # 栈底出
"1"
127.0.0.1:6379> rpop list02 # 队尾出
"5"
127.0.0.1:6379> lrange list01 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> lrange list02 0 -1
1) "2"
2) "3"
3) "4"
# LINDEX key index 通过索引获取列表中的元素
127.0.0.1:6379> lrange list02 0 -1
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> lindex list02 3
(nil)
127.0.0.1:6379> lindex list02 2
"4"
# LLEN key 获取列表长度
127.0.0.1:6379> llen list01
(integer) 3
# LREM key count value 移除列表元素
127.0.0.1:6379> rpush list03 1 2 3 3 3 4 5 6
(integer) 8
127.0.0.1:6379> lrange list03 0 -1
1) "1"
2) "2"
3) "3"
4) "3"
5) "3"
6) "4"
7) "5"
8) "6"
127.0.0.1:6379> lrem list03 2 3 # 在list03中删除2个值为3的元素
(integer) 2
127.0.0.1:6379> lrange list03 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
# LTRIM key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
127.0.0.1:6379> lpush list01 1 2 3 4 5 6 7 8
(integer) 8
127.0.0.1:6379> ltrim list01 0 4
OK
127.0.0.1:6379> lrange list01 0 -1
1) "8"
2) "7"
3) "6"
4) "5"
5) "4"
# RPOPLPUSH source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回,记忆RPOP出栈,LPUSH压栈
# 示例一
127.0.0.1:6379> lpush list01 1 2 3
(integer) 3
127.0.0.1:6379> lpush list02 1 2 3
(integer) 3
127.0.0.1:6379> lrange list01 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lrange list02 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> rpoplpush list01 list02
"1"
127.0.0.1:6379> lrange list01 0 -1
1) "3"
2) "2"
127.0.0.1:6379> lrange list02 0 -1
1) "1"
2) "3"
3) "2"
4) "1"
# 示例二
127.0.0.1:6379> rpush list03 1 2 3
(integer) 3
127.0.0.1:6379> rpush list04 1 2 3
(integer) 3
127.0.0.1:6379> lrange list03 0 -1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> lrange list04 0 -1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> rpoplpush list03 list04
"3"
127.0.0.1:6379> lrange list03 0 -1
1) "1"
2) "2"
127.0.0.1:6379> lrange list04 0 -1
1) "3"
2) "1"
3) "2"
4) "3"
# LSET key index value 通过索引设置列表元素的值
127.0.0.1:6379> lrange list01 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lset list01 1 x
OK
127.0.0.1:6379> lrange list01 0 -1
1) "5"
2) "x"
3) "3"
4) "2"
5) "1"
# LINSERT key BEFORE/AFTER pivot value 在列表的元素前或者后插入元素
127.0.0.1:6379> linsert list01 before x java
(integer) 6
127.0.0.1:6379> linsert list01 after x oracle
(integer) 7
127.0.0.1:6379> lrange list01 0 -1
1) "5"
2) "java"
3) "x"
4) "oracle"
5) "3"
6) "2"
7) "1"
List 性能总结:
- 它是一个字符串链表,left、right都可以插入添加;
- 如果键不存在,创建新的链表;
- 如果键已存在,新增内容;
- 如果值全移除,对应的键也就消失了。
- 链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。
Set常用命令
- 单值多value
- 无序无重复,可用来去重
# SADD key member1 [member2] 向集合添加一个或多个成员,SADD 记忆为 set add
# SMEMBERS key 返回集合中的所有成员
127.0.0.1:6379> sadd set01 1 1 2 2 3 3
(integer) 3
127.0.0.1:6379> smembers set01
1) "1"
2) "2"
3) "3"
# SISMEMBER key member 判断 member 元素是否是集合 key 的成员
# SISMEMBER 可记忆为是 set is member的缩写
127.0.0.1:6379> smembers set01
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> sismember set01 1 #有则返回1
(integer) 1
127.0.0.1:6379> sismember set01 2
(integer) 1
127.0.0.1:6379> sismember set01 x #无则返回0
(integer) 0
# SCARD key 获取集合的成员数
127.0.0.1:6379> scard set01
(integer) 3 #集合中有3个元素
# SREM key member1 [member2] 移除集合中一个或多个成员
127.0.0.1:6379> smembers set01
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> srem set01 3
(integer) 1
127.0.0.1:6379> smembers set01
1) "1"
2) "2"
# SRANDMEMBER key [count] 返回集合中一个或多个随机数,相当于抽奖
# SRANDMEMBER 即 set rand member
127.0.0.1:6379> sadd set02 1 2 3 4 5
(integer) 5
127.0.0.1:6379> srandmember set02 3 #随机返回3个元素
1) "3"
2) "2"
3) "4"
# SPOP key 移除并返回集合中的一个随机元素
127.0.0.1:6379> smembers set02
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> spop set02
"1"
127.0.0.1:6379> spop set02
"3"
127.0.0.1:6379> smembers set02
1) "2"
2) "4"
3) "5"
# SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集
127.0.0.1:6379> sadd set01 11 22 33
(integer) 3
127.0.0.1:6379> sadd set02 a b c
(integer) 3
127.0.0.1:6379> smembers set01
1) "11"
2) "22"
3) "33"
127.0.0.1:6379> smembers set02
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> smove set01 set02 11 #将set01中的值11移动到set02
(integer) 1
127.0.0.1:6379> smembers set01
1) "22"
2) "33"
127.0.0.1:6379> smembers set02 #set是无序不重复的
1) "11"
2) "b"
3) "a"
4) "c"
# SDIFF key1 [key2] 返回给定所有集合的差集
# 返回值在第一个set里面而不在后面的任何一个set里面
127.0.0.1:6379> sadd set01 1 2 3 4 5
(integer) 5
127.0.0.1:6379> sadd set02 1 2 3 a b
(integer) 5
127.0.0.1:6379> sdiff set01 set02
1) "4"
2) "5"
127.0.0.1:6379> sdiff set02 set01
1) "b"
2) "a"
# SINTER key1 [key2] 返回给定所有集合的交集
127.0.0.1:6379> sinter set01 set02
1) "1"
2) "2"
3) "3"
# SUNION key1 [key2] 返回所有给定集合的并集
127.0.0.1:6379> sunion set01 set02 #会去重
1) "b"
2) "5"
3) "3"
4) "a"
5) "2"
6) "1"
7) "4"
Hash常用命令
key-Value模式不变,但Value是一个键值对
# HSET key field value 将哈希表 key 中的字段 field 的值设为 value
# HGET key field 获取存储在哈希表中指定字段的值
127.0.0.1:6379> hset user id 1 #key是user,但是value是 id 1
(integer) 1
127.0.0.1:6379> hget user id
"1"
127.0.0.1:6379> hset user name zhangsan
(integer) 1
127.0.0.1:6379> hget user name
"zhangsan"
# HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中
# HMGET key field1 [field2] 获取所有给定字段的值
# HMSET 即 hash more set;HMGET 即 hash more get
127.0.0.1:6379> hmset user id 1 name zhangsan age 20
OK
127.0.0.1:6379> hmget user id name age
1) "1"
2) "zhangsan"
3) "20
# HGETALL key 获取在哈希表中指定 key 的所有字段和值
127.0.0.1:6379> hgetall user
1) "id"
2) "1"
3) "name"
4) "zhangsan"
5) "age"
6) "20"
# HDEL key field1 [field2] 删除一个或多个哈希表字段
127.0.0.1:6379> hdel user name # 将key为user对应的hash中的name字段删除
(integer) 1
127.0.0.1:6379> hgetall user
1) "id"
2) "1"
3) "age"
4) "20"
# HLEN key 获取哈希表中字段的数量
127.0.0.1:6379> hlen user
(integer) 2
# HEXISTS key field 查看哈希表 key 中,指定的字段是否存在
127.0.0.1:6379> hexists user id
(integer) 1 #有
127.0.0.1:6379> hexists user name
(integer) 0 #无
# HKEYS key 获取所有哈希表中的字段
# HVALS key 获取哈希表中所有值
127.0.0.1:6379> hkeys user
1) "id"
2) "age"
127.0.0.1:6379> hvals user
1) "1"
2) "20"
# HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment
127.0.0.1:6379> hmset user id 1 name zhangsan age 20
OK
127.0.0.1:6379> hget user age
"20"
127.0.0.1:6379> hincrby user age 2
(integer) 22
127.0.0.1:6379> hincrby user age 2
(integer) 24
# HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment
127.0.0.1:6379> hset user score 91.5
(integer) 1
127.0.0.1:6379> hget user score
"91.5"
127.0.0.1:6379> hincrbyfloat user score 0.5
"92"
127.0.0.1:6379> hget user score
"92
# HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值。
127.0.0.1:6379> hsetnx user age 28
(integer) 0 #插入失败
127.0.0.1:6379> hsetnx user email abc@163.com
(integer) 1 #插入成功
Zset常用命令
- 在set基础上,加一个score值。
- 例如:set是 k1 v1 v2 v3,而 zset 是 k1 score1 v1 score2 v2
# ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
127.0.0.1:6379> zadd zset01 60 v1 70 v2 80 v3 100 v4
(integer) 4
# ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合指定区间内的成员
127.0.0.1:6379> zrange zset01 0 -1 #输出只带有值
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6379> zrange zset01 0 -1 withscores #输出只带有值和分数
1) "v1"
2) "60"
3) "v2"
4) "80"
5) "v3"
6) "100"
# ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 通过分数返回有序集合指定区间内的成员
127.0.0.1:6379> zrangebyscore zset01 60 80 # [60,80]
1) "v1"
2) "v2"
127.0.0.1:6379> zrangebyscore zset01 60 (80 # [60,80)
1) "v1"
2) "v2"
127.0.0.1:6379> zrangebyscore zset01 (60 (80 # (60,80)
1) "v2"
# ZRANGEBYSCORE key min max [WITHSCORES] LIMIT
127.0.0.1:6379> zrangebyscore zset01 60 100
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6379> zrangebyscore zset01 60 100 limit 0 2 # 加上LIMIT表示从zrangebyscore zset01 60 100的输出结果中,从0开始,截取2个元素
1) "v1"
2) "v2"
# ZREM key member [member …] 移除有序集合中的一个或多个成员
127.0.0.1:6379> zrange zset01 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6379> zrem zset01 v4
(integer) 1
127.0.0.1:6379> zrange zset01 0 -1
1) "v1"
2) "v2"
3) "v3"
# ZCARD key 获取有序集合的成员数
127.0.0.1:6379> zcard zset01
(integer) 3
# ZCOUNT key min max 计算在有序集合中指定区间分数的成员数
127.0.0.1:6379> zrange zset01 0 -1 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"
127.0.0.1:6379> zcount zset01 60 70 #统计60~80分之间的个数
(integer) 2
# ZRANK key member 返回有序集合中指定成员的索引
127.0.0.1:6379> zrange zset01 0 -1
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> zrank zset01 v3 #拿到v3的下标
(integer) 2
# ZSCORE key member 返回有序集中,成员的分数值
127.0.0.1:6379> zscore zset01 v3
"80"
# ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
127.0.0.1:6379> zrange zset01 0 -1 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"
127.0.0.1:6379> zrevrank zset01 v3
(integer) 0
127.0.0.1:6379> zrevrank zset01 v1
(integer) 2
# ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到低
127.0.0.1:6379> zrange zset01 0 -1 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"
127.0.0.1:6379> zrevrange zset01 0 -1 withscores
1) "v3"
2) "80"
3) "v2"
4) "70"
5) "v1"
6) "60"
# ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序
127.0.0.1:6379> zrangebyscore zset01 60 70
1) "v1"
2) "v2"
本博客未经授权禁止转载