Redis的主要使用场景是缓存数据,所以本文并不仅局限于语法,还会结合“缓存”的场景给出基于项目的案例。
1.键操作命令
Redis是以键值对的方式来缓存数据的
1.1.判断键是否存在
exists key
返回值为1
代表键存在,返回值为0
代表键不存在
1.2.用keys命令查找键
keys命令可以用通配符或正则表达式来查找指定模式的键
keys pattern
pattern可以用“?”代替一个字符;用“*”匹配0、1或多个字符;还可以用正则表达式方式匹配
keys n?me keys id00*
1.3.用scan命令查找键
语法:
scan cursor [MATCH pattern] [COUNT count] [TYPE type]
示例:
127.0.0.1:6379> scan 0 1) "0" 2) 1) "namelist" 2) "id002" 3) "name002" 4) "name003" 5) "key:__rand_int__" 6) "id001" 7) "name001" 8) "age001" 9) "age002"
表示从0号游标开始查找键,其中表示返回键数量的COUNT值默认是10,也就是说该命令将从头开始返回10个键的名称。
127.0.0.1:6379> scan 0 MATCH * COUNT 5 1) "5" 2) 1) "namelist" 2) "id002" 3) "name002" 4) "name003" 5) "key:__rand_int__"
依然是从0号游标开始查找(从头开始),这里用MATCH *
表示查找所有类型的键,用COUNT
表示返回的数量。实现部分查找。
1.4.重命名键
通过rename
和renamenx
两个命令可以重命名键
rename key newkey renamenx key newkey
- key表示旧的键名,newkey表示新的键名。
- 对于这两个命令,如果旧键名key不存在,就会返回错误。
- 对于rename命令,如果命名后的newkey键名已经存在,那么会覆盖旧值。
- 对于renamenx命令,如果newkey键名已经存在,那么会返回0,不执行修改命令。
1.5.删除键
用del命令删除键后,该键所对应的值也会一并删除
del key [key ...]
1.5.关于键存活时间命令
如果设置了键的生存时间,那么到时间后这个键就会被删除,通过pttl
和ttl
命令能查看指定键的生存时间
pttl key ttl key
- pttl以毫秒为单位返回该key的生存时间,ttl以秒为单位返回该key的生存时间
- 如果对应的key不存在,则这两个命令都返回‒2
- 如果key存在,但没有设置生存时间(一直生存),那么这两条命令返回‒1
2.HyperLogLog相关命令
2.1.用pfadd添加键
通过pfadd命令,能把键值对添加到HyperLogLog对象中,添加后即可进行基数统计。
语法:
PFADD key element [element ...]
2.2.用pfcount统计基数值
用pfcount可以查看一个或多个键的基数
语法:
PFCOUNT key [key ...]
示例:
127.0.0.1:6379> pfadd name1 1 2 3 (integer) 1 127.0.0.1:6379> pfadd name2 3 4 5 (integer) 1 127.0.0.1:6379> pfcount name1 name2 (integer) 5
如果key不存在则返回0
2.3.用pfmerge进行合并操作
通过pfmerge命令,能把多个HyperLogLog合并成一个
语法:
PFMERGE destkey sourcekey [sourcekey ...]
sourcekey是待合并的对象,可以是一个或多个;destkey是合并后HyperLogLog的键,如果合并前destkey不存在,则会新建一个。
示例:
127.0.0.1:6379> PFMERGE name10 name1 name2 OK 127.0.0.1:6379> PFCOUNT name10 (integer) 5
2.4.统计网站访问人数
在网站分析方面有两个统计指标:第一个是统计总访问量,第二个是统计访问人数。统计总访问量比较好办,每来一次访问加1即可,而在统计访问人数时需要去除重复,比如某人在某天内访问了100次,但在统计访问人数时只能算作一次。
通过如下的pfadd和pfcount命令,大家可以掌握用HyperLogLog统计访问人数的做法。
3.排序相关命令
排序是数据库必备的命令,在Redis这种NoSQL数据库里可以通过本节给出的命令对列表、集合与有序集合等格式的数据进行升序或降序的排列操作。
3.1.用sort命令进行排序
在sort命令里,可以通过asc参数进行升序排列操作,通过desc参数进行降序排列操作。
127.0.0.1:6379> LPUSH sa 100 110 150 190 80 140 (integer) 6 127.0.0.1:6379> SORT sa asc 1) "80" 2) "100" 3) "110" 4) "140" 5) "150" 6) "190" 127.0.0.1:6379> SORT sa desc 1) "190" 2) "150" 3) "140" 4) "110" 5) "100" 6) "80"
排序命令不会对列表本身的数据产生影响:
127.0.0.1:6379> LRANGE sa 0 -1 1) "140" 2) "80" 3) "190" 4) "150" 5) "110" 6) "100"
使用sort命令对集合元素进行降序操作:
127.0.0.1:6379> SORT name6 desc alpha 1) "dayi" 2) "dasisi" 3) "dasansan" 4) "daerr"
3.2.用by参数指定排序模式
在之前sort相关的范例中,有的是以数值的方式排序的,如果加上alpha参数,则可以通过字母顺序进行排序,此外还可以通过by参数设置排序的模式。
127.0.0.1:6379> LPUSH vip vip1 vip3 vip2 vip4 (integer) 4 127.0.0.1:6379> SORT vip by vip* 1) "vip1" 2) "vip2" 3) "vip3" 4) "vip4"
这里是对数字进行排序,所以不用加alpha。
3.3.用limit参数返回部分排序结果
在之前的排序操作里,返回的是排好序的所有元素。在一些场景里,无须返回所有的排序结果,而只需返回部分排好序的元素,此时就可以用limit参数。
语法:
[LIMIT offset count]
127.0.0.1:6379> RPUSH num 1 2 4 6 8 9 5 (integer) 7 127.0.0.1:6379> SORT num limit 0 4 asc 1) "1" 2) "2" 3) "4" 4) "5" 127.0.0.1:6379> SORT num limit 3 3 asc 1) "5" 2) "6" 3) "8"
3.4.get参数用法
通过sort命令里的get参数可以用排序的结果作为键,再去获取对应的值。
127.0.0.1:6379> lpush score 100 80 90 85 (integer) 4 127.0.0.1:6379> set 100 Peter-100 OK 127.0.0.1:6379> set 80 Mary-80 OK 127.0.0.1:6379> set 90 Tim-90 OK 127.0.0.1:6379> set 85 John-85 OK 127.0.0.1:6379> sort score get * 1) "Mary-80" 2) "John-85" 3) "Tim-90" 4) "Peter-100"
3.5.通过store参数提升性能
对于给定的数据对象,如果经常需要用相对固定的模式进行排序,就可以用store参数来缓存结果,这样每次做相同的排序动作时就不需要耗费资源从头做起了,可以从缓存中直接得到结果。
127.0.0.1:6379> sort score desc store score-desc (integer) 4 127.0.0.1:6379> lrange score-desc 0 -1 1) "100" 2) "90" 3) "85" 4) "80" 127.0.0.1:6379>
用sort
命令对score
进行降序排列,同时还用store
参数把排序的结果保存到score-desc
里,通过lrange
命令能看到缓存结果score-desc
对象中的数据。