美文网首页
Redis其它功能

Redis其它功能

作者: Trouble_Ma | 来源:发表于2018-10-21 14:53 被阅读0次

过期

EXPIRE和TTL

EXPIRE可以设定一个key的销毁时间(不需要关心value的类型):

set resource:lock "demo"

expire resource:lock 120 //设置resource:lock这个key在120秒之后被回收

EXPIREAT key unixtimestamp:设置一个key在一个指定的unix时间销毁

PERSIST key:去掉key的过期限制;

TTL可以用来查看一个key还有多少时间回收;

如果TTL返回-2代表一个KEY不存在(已经回收);

如果TTL返回-1代表一个KEY不会过期(直接用set设置的key)

如果使用set重新设置了一个KEY值,那么TTL值也会被重置;

发布和订阅

1,redis提供了一个订阅和发布消息的功能,在这个功能中,redis扮演了一个消息路由服务的功能;

2,redis的发布订阅功能是在各个客户端之间的发布/订阅;

3,常用命令:

1, SUBSCRIBE channel [channel ...] :订阅一个频道;

subscribe warnings errors =>订阅warnings和errors两个频道;

2, PUBLISH channel message :向频道中发布一条消息:

subscribe warnings 'something wrong?';

3, UNSUBSCRIBE [channel [channel ...]] :取消订阅频道,如果直接是UNSUBSCRIBE命令,则取消所有消息订阅;

4,订阅/发布的常见使用场景:

redis的订阅/发布的性能非常高,可以达到15000/秒次;非常适合用于完成实施通讯/高效的消息队列等场景;

排序

redis中提供了sort命令,可以对list,set,sortedset进行复杂的排序功能,排序的结果是一个list;

SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]

几个sort的例子:

rpush nlist 2 1 4 7 2 4 6

1,SORT mylist:对mylist进行排序(从小到大);1 2 2 4 4 6 7

2,SORT mylist DESC:从大到小;7 6 4 4 2 2 1

3,SORT mylist LIMIT 0 3 :从小到大排序并截取0~3位数据;1 2 2

复杂的sort:

lpush area_users 1

set user:name:1 sky

set user:level:1 36

lpush area_users 2

set user:name:2 leo

set user:level:2 40

lpush area_users 3

set user:name:3 loo

set user:level:3 20

sort area_users:按照user的id排序;

sort area_users by user:level:*:按照user:level:id 的值去排序area_users的值;

sort area_users by user:level:* get user:name:* desc:按照user:level:id的值降序排序,并按照排序的内容去得到user:name:*中的值;

lpush wolfcode:shop:bugs 1 2 3

hset bug:1 priority 2

hset bug:1 details "this is first bug! priority is 2."

hset bug:2 priority 3

hset bug:2 details "this is second bug! priority is 3."

hset bug:3 priority 1

hset bug:3 details "this is third bug! priority is 1."

在get中,如果get的key对应的value是一个hashes

可以使用->获取hashes中的特定fields:

sort wolfcode:shop:bugs by bug:->priority get bug:->details:按照bug:中的priority字段排序watch:leto的值,并且按照排序完成的值去bug:中的hashes得到details字段值;

scan

scan 命令用于遍历 key,使用增量的方式,性能较高;

scan 的原理:在扫描之前,设置一个游标值(从0开始),并可以设置筛选 key 的模式和增量的数量(即一次要看多少条数据);遍历的结果返回一个 list ,list 第一个值代表的是下一次要进行迭代的开始的游标值(注意,这个值不是下标,就是一个用来表示内部位置的值),我们就可以使用这个游标值进行下一次增量遍历,第二个值是一个 list,表示这一次遍历得到的 key 值;

scan 0 count 3 =>

  1. "2"

    1. "user:level:2"

    2. "user:name:2"

    3. "user:name:3"

scan 2 count 3 =>

  1. "9"

    1. "server:version"

    2. "user:level:3"

    3. "area_users"

    4. "user:name:1"

注意,如果在遍历的时候,不使用 match,那么count 一般能够控制住返回的数量,如果使用了match,结果数量不定;默认count为10;(可能返回的内容会多于count);

scan 0 match user:level:* count 3

事务

redis可以把一组操作包装在一个事务块中,让这些语句的执行具有原子性;

MULTI:代表一个事务块的开始;

EXEC :执行一个事务块中的语句,并将连接状态恢复到正常;

相关文章

网友评论

      本文标题:Redis其它功能

      本文链接:https://www.haomeiwen.com/subject/qtybzftx.html