写在前面

  学习《redis入门指南》条记,连系实践,只纪录主要,明确,属于新知的相关内容。

&NBsp;

事务

  1、redis中的事务由一组下令的聚集组成,要么都执行,要么都不执行,同时redis的事务还可以保证事务内的下令会依次执行不被其他下令插入。

  2、下令MULTI开启事务,之后发送一些列需要执行的指令,最后发送EXEC执行事务,一旦乐成发送EXEC,所有的下令就一定会被执行。

  3、当redis事务中的下令发生了语法错误时,执行EXEC后就会直接返回错误,其中语法准确的下令也不会执行。

  4、当redis事务中的下令发生了运行错误时,好比使用散列类型的下令操作聚集类型,这种错误在语法检查阶段无法发现,泛起运行错误的下令,在返回内容中将有错误信息,其他下令依然会正常执行。

  5、redis事务没有关系数据库事务提供的回滚功效。

  6、WATCH下令可以监控一个或多个键,一旦其中有一个键被修改,那之后的一个事务就不会执行,监控一直连续到事务执行(即EXEC)之前,由于事务中的下令会在EXEC之后执行,以是这个事务中可以修改适才WATCH监控的键。

  7、执行EXEC之后会作废对所有键的监控,也可以通过UNWATCH来作废监控。

 

过时时间

  8、设置过时时间

    EXPIRE key seconds

    redis可以为每一个顶层数据结构(5种)的键设置过时时间,过时后将自动删除,过时时间为秒,示意还剩若干时间就会删除这个键。返回1示意设置乐成,0失败。

  9、查看剩余过时时间

TTL key

当键不存在时返回-2,没有过时时间返回-1。

10、作废过时时间

PERSIST key

除此之外,使用SET或GETSET(先设置新的值,在返回旧的值)为键赋值,也会消灭过时时间,需要再次设置,其他对键值操作的下令不会对过时时间发生影响。

11、PEXPIRE key Millisecond

以毫秒为单元设置过时时间

12、以UNIX时间设置过时时间

EXPIREAT key seconds

PEXPIREAT key millisecond

13、若是WATCH下令监控了一个有过时时间的键,该键时间到期自动删除不会被WATCH以为该键被改变。

  14、过时时间这一特征使redis可以看成缓存使用,当缓存的数目越多,到达redis最大可用内存大小(通过配置文件的maxmemory修改),将会凭据maxmemory-policy参数指定的计谋举行删除,直到占用的内存小于限制。

  

  redis支持的镌汰键的规则

规则 说明
volatile-lru 使用LRU算法删除一个键(只对设置了过时时间的键)
allkeys-lru 使用LRU算法删除一个键
volatile-random 随机删除一个键(只对设置了过时时间的键)
allkeys-random 随机删除一个键
volatile-ttl 删除过时时间最近的一个键
noeviction 删除过时时间最近的一个键

  LRU(Least Recently Used)算法即”最近最少使用“,其以为最近最少使用的键在未来一段时间内也不会被用到。

 

排序 SORT

  15、对聚集,列表,有序聚集排序

    SORT key [ALPHA] [DESC] [LIMIT offset count]

    对有序聚集举行排序时,会忽略元素的分数,默认情形下,SORT下令会实验将所有元素转换成双精度浮点数举行排序,转换失败则排序失败。ALPHA参数用于指明使用字典顺序排序;DESC参数指明根据从大到小排序,由于默认是从小到大;LIMIT参数用来返回指定局限的效果,这两个参数的用法与SQL一致。

  16、by参考键

    BY

    参考键可以是字符串类型或散列类型(示意为键名->字段名)的某一个字段,若是SORT下令提供了by参数,那么它将不再根据元素自身的值举行排序,而是用每个元素的值替换参考键中第一个" * "并获取其值,看成排序的依据,如:

    SORT sortbylist BY itemscore:* (sortbylist为list类型,itemscore:*为字符串类型)

    SORT posts BY post:*->time (posts为聚集类型,post:*->time是散列类型的一个字段)

    当参考键不包罗" * "时,将不会执行排序操作;当参考键的值相同时,会凭据元素自己做对照;当参考键不存在时,参考键的值默以为0;当参考键为散列类型时," * "只能泛起在" -> "之前,否则" * "将不会被替换,会被以为是一个字段名,即常量。

  17、get参数

    GET

    它的作用是使SORT下令返回的效果不是元素自身的值,而是由GET指定的值,如:

    SORT posts BY post:*->time DESC GET post:*->title GET post:*->time

    SORT posts BY post:*->time DESC GET post:*->title GET #

    一个SORT下令只能由一个BY参数,但可以由多个GET参数,GET #会返回元素自己,当GET的键不存在时会返回nil。

  18、store参数

    STORE

    默认情形SORT会直接返回排序效果,使用STORE参数将会把排序效果存储到一个列表类型的键中,若是该键存在则会笼罩,如:

    SORT posts BY post:*->time DESC GET post:*->title GET # STORE result

  19、sort的性能

    SORT 下令复杂度为O(n+mlog(m)),n示意待排序的键中元素的数目,m代表要返回的元素的数目。削减排序的样本数目(n),使用LIMIT削减获取排序效果的数目(m),使用STORE将效果缓存都可以提高sort的性能。

  

新闻通知

  20、以壅闭方式获取列表中的值

    BLPOP listkey timeout

    BRPOP listkey timeout

    当列表为空时,这个毗邻将会壅闭,imeout参数为超时时间,超出此时间仍没有元素则返回nil,为0示意马上返回;当获得元素后,返回两个值,分别是键名和元素值。

    可用于实现简朴新闻行列。

  21、优先行列的实现

    BLPOP key [key ...] timeout

    BRPOP key [key ...] timeout

    壅闭方式获取行列中的元素完整下令如上所述,可以弹出多个键中的元素,若是每一个键都没有元素则返回nil,否则,会根据键从左到右的顺序弹出一个元素。

  22、“公布订阅”模式

    此模式中有公布者和订阅者两种角色,公布者可以往指定频道公布新闻,所有订阅此频道的订阅者都市收到新闻。

  23、公布新闻

    PUBLISH channel message

    返回值为收到新闻的订阅者数目,新闻不会被缓存,新的订阅者收不到旧的新闻。

  24、订阅频道

    SUBSCRIBE channel [channel ...]

    可以同时订阅多个频道,执行订阅下令后会进入订阅模式,此模式下只能执行属于“公布/订阅”模式下的4个下令(SUBSCRIBE 、UNSUBSCRIBE、PSUBSCRIBE 、PUNSUBSCRIBE )。

    订阅状态的客户端只会收到3种下令,每种下令都有3个值,第一个值是新闻类型,凭据类型的差别,第二三个值意义也差别。

    a、subsrcibe 订阅乐成的反馈,参数分别是订阅乐成的频道名和订阅当前频道的客户端数目。

    b、message 收到订阅新闻,参数为发生新闻的频道和新闻内容。

    c、unsubscirbe 乐成作废某个订阅频道,参数为频道名和当前客户端订阅的频道数目,当此值为0时,客户端会退出订阅状态。

  25、作废订阅与根据规则订阅

    UNSUBSCRIBE [channel ...]

    PSUBSCRIBE 

    UNPSUBSCRIBE 

    作废订阅的下令若是不带参数,会作废所有订阅的频道;按规则订阅支持订阅名称相符glob气概通配符花样的频道;按规则作废用法类似。

    按规则订阅时会泛起重复订阅一个频道的情形,也会重复收到新闻,重复新闻(第二条最先)的新闻类型为pmessage,公布者也会收到有多个客户端收到新闻的回复;作废订阅时,通过通俗订阅和按规则订阅的频道不会相互影响(不会泛起相互作废的情形),同时在作废按规则订阅时,不再执行通配睁开,而是字符串匹配,只会作废按规则订阅时的原字符串对应的频道。

 

管道

  26、redis-cli与redis-server使用TCP毗邻,发送下令和发送下令的执行效果都需要玩咯传输,这两个部门的耗时称为往返延时

  27、一样平常情形下,往返延时的数目级上相当于redis执行一个简朴下令的执行时间。

  28、redis底层通信协议对管道(pipeline)提供了支持,通过管道一次性可以发送多条下令并执行完后一次性将效果返回。

,

联博接口

www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。

发布评论

分享到:

评论网:国家队威尽共7将入围
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。