Redis学习(九):Redis进阶

一、事务

定义:Redis中的事务是一组命令的集合。事务同命令一样都是Redis中最小的执行单位,一个事务中的命令要么都执行,要么都不执行。采用MULTI...EXEC来进行事务控制。

错误处理:

  • 语法错误:只要命令的集合中有一条命令具有语法错误,执行EXEC后直接返回错误,连语法正确的命令也不会执行。
  • 运行错误:指在命令执行时出现的错误(例如使用散列类型的命令操作集合类型的键)。如果事务里的一条命令出现了运行错误,事务里的 其他命令依然会执行,包括出错之后的命令

WATCH命令介绍:

WATCH命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。监控一直持续到EXEC命令执行。(事务中的命令实在EXEC后执行的,所以在MULTI命令之后可以修改WATCH监控的键值)。

线程

使用UNWATCH来取消监控。

二、过期时间

EXPIRE key seconds:为一个键设置过期时间,seconds单位是秒/s。返回1表示设置成功,表示键不存在或者设置失败。

TTL key:可以得知一个键还有多少秒被删除。当键不存在时返回-2。没有为键设置过期时间使用此命令返回-1。

PERSIST key:取消键的过期时间设置。成功返回1,否则为0。

除PERSIST命令之外,使用SET或者GETSET命令为键赋值同样会清除键的过期时间。

PEXPIRE key seconds:单位毫秒。PEXPIRE key 1000 等价于EXPIRE 1。

如果使用watch命令检测了一个拥有过期时间的键,该键时间到期自动删除并不会被WATCH认为该键被修改。

三、缓存

为了提高网站的负载能力,常常需要将一些访问频率高但是对CPU或IO资源消耗较大的操作的结果缓存出来,并希望这些缓存过一段时间自动过期,这时可以使用Redis缓存键。

但是,当服务器内存有限的时候,如果大量使用缓存键,并且将过期的时间设置的比较长,就会导致redis占满内存;而另一方面如果为了防止redis占满内存而将缓存键的过期时间设置的太短,就可能导致缓存命中率太低并且大量内存闲置。为此可以限制redis能够使用的最大内存,并让redis按照一定的规则淘汰不需要的缓存键:

修改配置文件中的maxmemory参数,限制Redis最大可用内存大小(字节),当超出这个限制时Redis会依据maxmemory-policy参数指定的策略删除不需要的键知道redis占用的内存小于指定内存。maxmemory-policy支持规则如下:其中LRU算法即“最近很少使用”,其认为最近很少使用的键在未来的一段时间内也不会被用到。

四、排序

   1.SORT命令

sort命令可以对列表类型,集合类型,有序集合类型进行排序,并且可以完成与关系型数据库中的连接查询相类似的任务。

SORT key 【ALPHA】:ALPHA可选,可以按照字典顺序排列非整数。

    2.BY参数

   BY 参数的语法为“BY参考键”。其中参考键可以是字符串类型键或者是散列类型键的某个字段(表示为键名—>字段名)。如果提供了BY参数,SORT命令将不再依据元素自身的值进行排序,而是对每个元素使用元素的值替换参考键中的第一个“*”并获取其值,然后依据该值对元素排序。

即:对sortbylist进行排序时,不再使用2,1,3来进行排序,而是使用集合中itemscore:*所对应的值(50,100,-10)来代替(2,1,3)来进行排序,但是最后的排序结果还按照列表中的元素显示。

3.GET参数

get参数和by参数用法基本相同,只是get参数是获取id对应的字段值并返回。

如下:

4.STORE参数

会把用sort命令排序后的结果存储在一个列表类型的键中。

5.SORT命令的性能优化

sort命令是Redis中最强大最复杂的命令之一,如果使用不好很容易成为性能瓶颈。sort命令得时间复杂度是

O(n+mlog(m))。其中n表示要排序得列表(集合或有序元素)中的元素个数,m表示要返回的元素个数。当n较大时sort命令得性能相对较低,并且Redis在排序前会建立一个长度为n得容器来存储待排序得元素,虽然只是一个临时得过程,但如果同时进行较多得大数据量排序操作则会严重影响性能。

开发时主要注意得有以下几点:

  • 尽可能减少待排序键中元素得个数(使n尽量小)
  • 使用LIMIT参数之获取需要的数据(使M尽量小)
  • 如果要排序得数据数量较大,尽可能使用store命令将其缓存。

猜你喜欢

转载自blog.csdn.net/StringBuff/article/details/88138733