Redis(2):常用命令详解

redis命令不区分大小写

通用命令: 1. 获得符合规则的键名列表: keys pattern    其中pattern符合glob风格  ? (一个字符) * (任意个字符) [] (匹配其中的任意一个字符)  \x (转义字符) 需要注意的是keys命令会遍历redis中的所有键,如果键比较多,会影响性能 keys *  会列出当前库中的所有键, 注意这个列出的不仅仅是string类型的,其他所有类型的key都包括(即使是hash类型的)。

127.0.0.1:6379> HSET hashkey key1 value1
(integer) 1
127.0.0.1:6379> keys *
1) "hashkey"

2. 判断一个键是否存在: exists key 如果存在返回 (integer) 1 否则返回 (integer) 0

3. 删除键: DEL key [key ...] 可以传入多个key ,其实可以配合 keys命令一起使用:

# 可以发现直接使用*,此时是没法删除已有的hashkey键
zyq@ubuntu:~/KiDe/Python/test$ redis-cli KEYS * | xargs redis-cli DEL
(integer) 0
zyq@ubuntu:~/KiDe/Python/test$ redis-cli KEYS "hash*" | xargs redis-cli DEL
(integer) 1


zyq@ubuntu:~/KiDe/Python/test$ redis-cli
127.0.0.1:6379> HSET hashkey key1 value1
(integer) 1
127.0.0.1:6379> exit
# 而使用 ` `包裹命令来执行的时候 * 就可以删除前面设置进去的hashkey键
zyq@ubuntu:~/KiDe/Python/test$ redis-cli DEL `redis-cli KEYS "*"`
(integer) 1
zyq@ubuntu:~/KiDe/Python/test$ redis-cli 
127.0.0.1:6379> HSET hashkey key1 value1
(integer) 1
127.0.0.1:6379> exit
zyq@ubuntu:~/KiDe/Python/test$ redis-cli DEL `redis-cli KEYS "hash*"`
(integer) 1

# 需要注意的一点还有,第二种用 `` 实现的删除比第一种效率要高。

4. 获得键值的数据类型: type key 如果key不存在 返回 none,否则返回key对应的值的类型

字符串类型: SET key value     GET key INCR key(如果存储的值不是数字或者增加之后超过范围,会报错) 相当于 value++,但是这个是原子操作 INCRBY key increment(该值可正可负) DECR key 、 DECRBY key decrement INCRBYFLOAT key increment  (支持 incrbyfloat bar 5E+4) APPEND key value (只是作为字符串追加) STRLEN key  (如果是中文,则返回中文编码后的字符串的长度 例如如果是utf-8编码的"你好" 则 strlen key 返回6) MGET key [key ...] / MSET key value [key value ...]   可以同时设置或者得到对应的值 GETBIT key offset                得到特定位上的值 如果超过长度则为0 SETBIT key offsetValue            设置特定位上的值 如果超过长度前面不够的用0补齐,此时要考虑性能 BITCOUNT key [start] [end]        计算从开始到结束的位上1的个数 BITOP operation destkey key [key ...]   BITPOS key 0/1 [start] [end] 获得第一个是0或1的位置的下标

常见的命令使用情况如下:

 1 127.0.0.1:6379> set foo bar
 2 OK
 3 127.0.0.1:6379> get foo
 4 "bar"
 5 # 对于非数字的增加,会抛出错误
 6 127.0.0.1:6379> incr foo
 7 (error) ERR value is not an integer or out of range
 8 # 如果对于不存在key值加1,相当于新建一个key值为0,然后再往上加一
 9 127.0.0.1:6379> incr newkey
10 (integer) 1
11 127.0.0.1:6379> get newkey
12 "1"
13 # float加的时候支持科学计数法
14 127.0.0.1:6379> INCRBYFLOAT newkey 1e+10
15 "10000000001"
16 # 往字符串后面追加值
17 127.0.0.1:6379> append foo bar2
18 (integer) 7
19 127.0.0.1:6379> get foo
20 "barbar2"
21 # 同时设置多个字符串类型的值
22 127.0.0.1:6379> mset key1 你好 key2 我好 key3 大家好
23 OK
24 # 长度根据编码方式有关
25 127.0.0.1:6379> STRLEN key1
26 (integer) 6
27 127.0.0.1:6379> GETBIT key1 1
28 (integer) 1
29 127.0.0.1:6379> GETBIT key1 2
30 (integer) 1
31 127.0.0.1:6379> BITCOUNT key1
32 (integer) 27

散列类型: 类似于map ,常用命令如下: HSET key field vlaue HGET key field   HMSET key field value [field value ...] HMGET key field [field ...] HGETALL key HEXISTS key field 判断field是否存在 HSETNX key field value 当字段不存在的时候进行赋值,原子操作 HINCRBY key field increment   HDEL key field [field ...] HKEYS key HVALS key HLEN key

命令的使用情况如下:

 1 127.0.0.1:6379> hset hashkey key1 value1
 2 (integer) 1
 3 127.0.0.1:6379> hget hashkey key1
 4 "value1"
 5 127.0.0.1:6379> hmset hashkey key2 value2 key3 value3 key4 value4
 6 OK
 7 127.0.0.1:6379> hmget hashkey key1 key2 key3 key4
 8 1) "value1"
 9 2) "value2"
10 3) "value3"
11 4) "value4"
12 127.0.0.1:6379> hmget hashkey key1 key2 key3 key
13 1) "value1"
14 2) "value2"
15 3) "value3"
16 4) (nil)
17 127.0.0.1:6379> HGETALL hashkey
18 1) "key1"
19 2) "value1"
20 3) "key2"
21 4) "value2"
22 5) "key3"
23 6) "value3"
24 7) "key4"
25 8) "value4"
26 127.0.0.1:6379> HEXISTS hashkey key11
27 (integer) 0
28 127.0.0.1:6379> HSETNX hashkey key1 value11
29 (integer) 0
30 127.0.0.1:6379> HSETNX hashkey key11 value11
31 (integer) 1
32 127.0.0.1:6379> HINCRBY hashkey key5 11
33 (integer) 11
34 127.0.0.1:6379> HDEL hashkey key11 key5
35 (integer) 2
36 127.0.0.1:6379> hkeys hashkey
37 1) "key1"
38 2) "key2"
39 3) "key3"
40 4) "key4"
41 127.0.0.1:6379> HVALS hashkey
42 1) "value1"
43 2) "value2"
44 3) "value3"
45 4) "value4"
46 127.0.0.1:6379> hlen hashkey
47 (integer) 4

列表类型: LPUSH key value [value ... ] RPUSH key value [value ... ] LPOP key   RPOP key   LLEN key LRANGE key start stop  (此时获得的元素包含下标为stop的, 负数表示倒数) LREM key count value 表示从列表中删除count个值为value的元素 (如果count为正数则从左边起删除、为负数表示从右边起删除) LINDEX key value LSET key index value LTRIM key start end 只保留列表指定范围的元素(包括下标为end元素)。通常与lpush一起使用 lpush logs $newlog; ltrim logs 0 99 LINSERT key BEFORE|AFTER pivot value 在值为pivot的元素前或者后插入一个值为value的元素 如果没有找到值为pivot的元素,则返回-1 ,否则返回插入成功之后列表的总长度 RPOPLPUSH source destination  从source列表中rpop一个元素然后lpush到destination列表中去 (source和destination可以是同一个,desitnation如果不存在会创建一个) 该操作也是原子的

命令的使用情况如下:

 1 127.0.0.1:6379> lpush list value1 value2 
 2 (integer) 2
 3 127.0.0.1:6379> rpush list value3 value4
 4 (integer) 4
 5 127.0.0.1:6379> lpop list
 6 "value2"
 7 127.0.0.1:6379> rpop list
 8 "value4"
 9 127.0.0.1:6379> llen list
10 (integer) 2
11 127.0.0.1:6379> lrange list 0 -1
12 1) "value1"
13 2) "value3"
14 127.0.0.1:6379> lrem key 1 value
15 (integer) 0
16 # 超过长度返回空
17 127.0.0.1:6379> LINDEX list 2
18 (nil)
19 127.0.0.1:6379> LINDEX list 1
20 "value3"
21 # 超过长度报错
22 127.0.0.1:6379> LSET list 3 value4
23 (error) ERR index out of range
24 127.0.0.1:6379> LSET list 2 value4
25 (error) ERR index out of range
26 127.0.0.1:6379> LSET list 1 value4
27 OK
28 # 如果不存在对应的元素,则设置失败返回-1
29 127.0.0.1:6379> LINSERT list BEFORE 1 value3
30 (integer) -1
31 127.0.0.1:6379> lrange list 0 -1
32 1) "value1"
33 2) "value4"
34 127.0.0.1:6379> LINSERT list BEFORE value4 value3
35 (integer) 3
36 127.0.0.1:6379> lpush list2 value21 value22
37 (integer) 2
38 127.0.0.1:6379> RPOPLPUSH list list2
39 "value4"
40 127.0.0.1:6379> lrange list 0 -1
41 1) "value1"
42 2) "value3"
43 127.0.0.1:6379> lrange list2 0 -1
44 1) "value4"
45 2) "value22"
46 3) "value21"

集合类型: SADD key member [member ... ] SREM key member [member ... ] SMEMBERS key   SISMEMBER key member   SDIFF key [key ...]  取第一个集合和剩下的所有集合的差集 SINTER key [key ...] 取所有集合的交集 SUNION key [key ...] 取所有集合的并集 SCARD key  求长度 SDIFFSTORE destination key [key ...] 就是增加了一个存储的目标列表 SINTERSTORE destination key [key ...] SUNIONSTORE destination key [key ...] SRANDMEMBER key [count]  随机获得集合中的元素,如果省略count则只获得一个,如果传入了count 那么如果count为正,则获得min(count, scard key)个不同的元素,如果count为负,则随机获得-count个元素,但是元素可能相同 SPOP key 随机弹出一个元素

命令的使用情况如下:

 1 127.0.0.1:6379> SADD set member1 member2 member3
 2 (integer) 3
 3 127.0.0.1:6379> srem set member3 member4
 4 (integer) 1
 5 127.0.0.1:6379> SMEMBERS set
 6 1) "member1"
 7 2) "member2"
 8 127.0.0.1:6379> SISMEMBER set member3
 9 (integer) 0
10 127.0.0.1:6379> SADD set2 member2 member3 member4
11 (integer) 3
12 127.0.0.1:6379> SDIFF set set2
13 1) "member1"
14 127.0.0.1:6379> SINTER set set2
15 1) "member2"
16 127.0.0.1:6379> SUNION set set2
17 1) "member4"
18 2) "member1"
19 3) "member3"
20 4) "member2"
21 127.0.0.1:6379> SCARD set
22 (integer) 2
23 127.0.0.1:6379> SDIFFSTORE set3 set set2
24 (integer) 1
25 127.0.0.1:6379> SMEMBERS set3
26 1) "member1"
27 127.0.0.1:6379> SRANDMEMBER set2 
28 "member3"
29 # 为正的时候最多将set中所有元素返回
30 127.0.0.1:6379> SRANDMEMBER set2 5
31 1) "member4"
32 2) "member3"
33 3) "member2"
34 # 为负的时候返回绝对值个数的元素,并且可能相同
35 127.0.0.1:6379> SRANDMEMBER set2 -5
36 1) "member3"
37 2) "member4"
38 3) "member2"
39 4) "member2"
40 5) "member3"
41 127.0.0.1:6379> SPOP set2
42 "member2"
43 127.0.0.1:6379> SMEMBERS set2
44 1) "member4"
45 2) "member3"

有序集合类型:

默认按照score升序排列 ZADD key score member [score member ...] ZSCORE key member   ZRANGE key start stop [withscores]   其中的start stop表示下标 ZREVRANGE key start stop [withscores]   ZRANGEBYSCORE key min max [withscores] [limit offset count]  获得指定分数范围的元素 默认是包含min和max 如果不想包含某一个界,请在值前加 (  eg : zrangebyscore zset1 70 (100 withscores 且 min和max 可以使用 +inf 或者 -inf 表示正无穷大和负无穷大  后面的limit offset count 相当于sql中的分页查询 ZREVRANGEBYSCORE key max min [withscores] [limit offset count] 需要注意此时 max和min的位置调换了 ZINCRBY key increment member 给特定元素增加分数 ZCARD key ZCOUNT key min max  这里是统计在min和max之间的元素个数 ZREM key member [member ...] ZREMRANGEBYRANK key start stop 删除固定下标范围的元素 ZREMRANGEBYSCORE key min max  删除分数范围内的元素 ZRANK key member   得到对应元素的下标,如果不存在返回 nil ZREVRANK key member   ZINTERSTORE destination numkeys key [key ...] [weights weight [weight...]] [AGGREGATE SUM|MIN|MAX]  和sinterstore差不多,区别在于weights参数指定权重,指定之后对应的集合中的值要乘以权重 并且 AGGREGATE 参数指定新集合的元素值来源方式,默认为sum,即为两者之和 numkeys指定要处理的集合个数 同理 有 ZUNIONSTORE 这里不再赘述 (PS: 没有ZDIFFSTORE) 命令的使用情况如下:

 1 127.0.0.1:6379> ZADD key 1 member1 2 member2 3 member3 4 member3
 2 (integer) 3
 3 127.0.0.1:6379> ZADD key 1 member1 2 member2 3 member3 4 member4
 4 (integer) 1
 5 127.0.0.1:6379> ZSCORE key member1
 6 "1"
 7 127.0.0.1:6379> ZRANGE key 0 -1
 8 1) "member1"
 9 2) "member2"
10 3) "member3"
11 4) "member4"
12 127.0.0.1:6379> zrange key 1 2
13 1) "member2"
14 2) "member3"
15 127.0.0.1:6379> ZREVRANGE key 1 2 WITHSCORES
16 1) "member3"
17 2) "3"
18 3) "member2"
19 4) "2"
20 127.0.0.1:6379> ZRANGEBYSCORE key 1 3 WITHSCORES LIMIT 0 2
21 1) "member1"
22 2) "1"
23 3) "member2"
24 4) "2"
25 # 注意反向的时候min和max的下标也要换过来
26 127.0.0.1:6379> ZREVRANGEBYSCORE key 1 3 WITHSCORES LIMIT 0 2
27 (empty list or set)
28 127.0.0.1:6379> ZREVRANGEBYSCORE key 3 1 WITHSCORES LIMIT 0 2
29 1) "member3"
30 2) "3"
31 3) "member2"
32 4) "2"
33 127.0.0.1:6379> ZINCRBY key 2 member3
34 "5"
35 127.0.0.1:6379> ZCARD key
36 (integer) 4
37 127.0.0.1:6379> ZCOUNT key 3 1
38 (integer) 0
39 127.0.0.1:6379> zcount key 1 3
40 (integer) 2
41 127.0.0.1:6379> ZREM key member1 
42 (integer) 1
43 127.0.0.1:6379> ZREMRANGEBYRANK key 0 0
44 (integer) 1
45 127.0.0.1:6379> zrange key 0 -1
46 1) "member4"
47 2) "member3"
48 127.0.0.1:6379> ZREMRANGEBYSCORE key 4 4
49 (integer) 1
50 127.0.0.1:6379> zrange key 0 -1
51 1) "member3"
52 127.0.0.1:6379> zrange key 0 -1 WITHSCORES
53 1) "member3"
54 2) "5"
55 127.0.0.1:6379> zadd zkey2 1 member3 2 member4
56 (integer) 2
57 127.0.0.1:6379> ZINTERSTORE key3 2 key zkey2
58 (integer) 1
59 127.0.0.1:6379> zrange key3 0 -1 WITHSCORES
60 1) "member3"
61 2) "6"
62 127.0.0.1:6379> ZUNIONSTORE key3 2 key zkey2 AGGREGATE MAX
63 (integer) 2
64 127.0.0.1:6379> zrange key3 0 -1 WITHSCORES
65 1) "member4"
66 2) "2"
67 3) "member3"
68 4) "5"

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏地方网络工作室的专栏

原生JS自己构建一个0-1之间的随机小数

原生JS自己构建一个0-1之间的随机小数 前言 我们都知道使用Math.random()来得到一个随机数。但是很多人都没有深入的思考过,如何这个随机数是怎么来的...

1825
来自专栏Seebug漏洞平台

以太坊智能合约OPCODE逆向之理论基础篇

在我们对etherscan等平台上合约进行安全审查时,常常会遇到没有公布Solidity源代码的合约,只能获取到合约的OPCODE,所以一个智能合约的反编译器对...

1493
来自专栏Seebug漏洞平台

Pwnhub之奇妙的巨蟒 Writeup

本周的Pwnhub延迟到了周一,所以周一中午就看了下这题,是一道Python 的pyc逆向题,思路到挺简单的,但是很花精力

50410
来自专栏抠抠空间

MySQL之表的数据类型

一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob....

3338
来自专栏阿凯的Excel

一对多查询,超实用的函数教程

今天和大家分享的是如何快速获取符合某个条件的第N个数。 如果这个问题改为获取最大的数,那一定很好解决,但是工作中不但要知道第一高峰是珠穆朗玛峰,还需要知道第二高...

2704
来自专栏陈树义

Oracle常用函数集锦

1、wmsys.wm_concat函数 将列转为行。例子: --表里的数据如下 SQL> select * from idtable; ID N...

3416
来自专栏landv

excel_VB宏脚本_批量生成点餐宝接受的格式

1202
来自专栏GIS讲堂

大量POI点展示的一种解决方案——续

在上文“ 大量POI点展示的一种解决方案”中,介绍了在在后台将POI生成图片在前台展示,文章中没有涉及到点的抽稀问题,也就是当点的数据量非常大的时候,这种展示方...

723
来自专栏菩提树下的杨过

(Head First 设计模式)学习笔记(3) --装饰者模式(StarBuzz咖啡店实例)

应用概述: StarBuzz咖啡店有很多饮料,每种饮料都可以根据客户需要加一些调料,比如深培咖啡可以加摩卡(或双倍摩卡),而且某些饮料可以分为大中小杯,根据容...

1698
来自专栏刘笑江的专栏

通过Swift学函数式编程

在文章SWIFT IS A LOT LIKE SCALA [1] 提到Swift和Scala有很大的相似之处,在某些特性甚至比Scala对函数式编程的支持更友好...

1505

扫码关注云+社区