初学Redis(4)——简单实现Redis缓存中的排序功能
来源:互联网 发布:大数据和java的关系 编辑:程序博客网 时间:2024/06/06 19:26
转自http://blog.csdn.net/qtyl1988/article/details/39545531
在实现缓存排序功能之前,必须先明白这一功能的合理性。不妨思考一下,既然可以在数据库中排序,为什么还要把排序功能放在缓存中实现呢?这里简单总结了两个原因:首先,排序会增加数据库的负载,难以支撑高并发的应用;其次,在缓存中排序不会遇到表锁定的问题。Redis恰好提供了排序功能,使我们可以方便地实现缓存排序。
redis中用于实现排序功能的是SORT命令。该命令提供了多种参数,可以对列表,集合和有序集合进行排序。SORT命令格式如下:
BY参数用于指定排序字段,功能类似于SQL中的order by。对于列表和集合而言,仅按照它们的值进行排序往往没有实际意义。以函数Cache2Hash返回的集合为例(实际上返回的是集合键),该集合中存储的是一系列完整的哈希键,只按照这些键进行排序,结果无非是按照数字或字典顺序排列,其用处显然不大。这是因为真正存储行数据的是哈希结构本身,而非哈希键。假设集合键为"resultset.hash:123456",集合中每个哈希键对应的哈希结构中都有一个名为“timestamp”的字段,现在要把集合中的所有哈希键按照timestamp字段进行排序,这时,只需执行以下命令:
从上例可以看出,BY的真正威力在于它可以让SORT命令按照一个指定的外部键的外部字段进行排序。SORT用集合resultset.hash:123456中的每个值(即每个哈希键)替换BY参数后的第一个“*”,并依据“->”后面给出的字段获取其值,最后根据这些字段值对哈希键进行排序。
LIMIT参数用于限制排序以后返回元素的数量,功能类似于SQL中的limit。该参数接受另外两个参数,即offset和count,LIMIT offset count表示跳过前offset个元素,返回之后的连续count个元素。可见,LIMIT参数可以用于实现分页功能。
GET参数用于返回指定的字段值。以集合resultset.hash:123456为例,使用BY参数对集合中的所有哈希键按照哈希结构中的timestamp字段排序后,SORT命令返回所有排序之后的哈希键。如果某个请求需要不是键而是某些字段值,这时就要使用GET参数,使SORT命令返回指定字段值。假设除timestamp字段以外,集合中每个哈希键对应的哈希结构中还有一个名为“id”的字段,通过以下命令可以使SORT返回按照timestamp排序以后的每个哈希键对应的哈希结构中的timestamp和id值:
SORT用集合resultset.hash:123456中的每个值(即每个哈希键)替换GET参数之后的第一个“*”,并将其作为返回值。值得注意的是,利用GET #能够得到集合中的哈希键本身。
ASC和DESC参数用于指定排序顺序(默认为ASC,即从低到高),ALPHA参数用于按照字典顺序排列非数字元素。
STORE参数用于将SORT命令的返回值,即排序结果存入一个指定的列表。加上STORE参数后,SORT命令的返回值就变为排序结果的个数。
下面的代码实现了按照哈希的某个字段对集合中的哈希键排序,并将结果存入列表的过程:
显然,对结果集中的哈希键进行排序要比对字符串键排序更加直观和方便。借助于排序函数,可以方便地实现在Redis中查询排序后的结果集,代码如下:
这样,在Redis中对结果集进行简单排序操作的功能就实现了。
- 初学Redis(4)——简单实现Redis缓存中的排序功能(转载)
- 初学Redis(4)——简单实现Redis缓存中的排序功能
- 初学Redis(4)——简单实现Redis缓存中的排序功能
- 初学Redis(4)——简单实现Redis缓存中的排序功能
- 初学Redis(4)——简单实现Redis缓存中的排序功能
- 初学Redis(4)——简单实现Redis缓存中的排序功能
- 初学Redis(4)——简单实现Redis缓存中的排序功能
- 初学Redis(4)——简单实现Redis缓存中的排序功能
- 初学Redis(3)——简单实现Redis缓存中的排序功能
- 初学Redis(四)简单实现Redis缓存中的排序功能
- 简单实现Redis缓存中的排序功能
- 简单实现Redis缓存中的排序功能(三)
- 初学Redis(2)——用Redis作为Mysql数据库的缓存
- 初学Redis(3)——用Redis作为Mysql数据库的缓存
- 初学Redis(2)——用Redis作为Mysql数据库的缓存
- 初学Redis(2)——用Redis作为Mysql数据库的缓存
- 初学Redis(2)——用Redis作为Mysql数据库的缓存
- 初学Redis(2)——用Redis作为Mysql数据库的缓存
- JS中输入的整数倒叙输出
- 手动启动Spring容器
- 基于 Python 和 Scikit-Learn 的机器学习介绍
- Maven项目pom.xml文件详解
- QT总结之信号与槽
- 初学Redis(4)——简单实现Redis缓存中的排序功能
- 雇佣问题
- 点击图片弹出页面效果常用代码
- position:absolute后设置left:50%发生的有趣小事
- 搜索-P
- Android 自定义View之正方形验证码输入框
- solr spellcheck 距离选取方案
- Java Maven项目之Nexus私服搭建和版本管理应用
- C#中Struct与Class的区别