Redis中的关系查询(范围查询,模糊查询等...)
本文部分转自于:http://blog.csdn.net/dc_726/article/details/42784317
本文对Redis如何保存关系型数据,以及如何对其匹配、范围、模糊查询进行举例讲解,其中模糊查询功能基于最新的2.8.9以后版本。
1 关系型数据的存储
以Staff对象为例,在关系型数据库或类似GridGain的内存网格产品中(底层使用H2数据库的内存模式存储),我们以表形式保存对象的数据。因为内存网格是基于对象做缓存的,所以还要额外多出一列(Staff列)保存整个对象的编码,例如序列化后的二进制或者JSON格式等,便于直接返回给应用后进行反序列化。而在Redis中,我们可以用id作为唯一标识,使用key-value、hash、zSet三种数据结构进行保存。Key-value是为了保存id和整个对象,确定id范围后可根据它将对象返回给客户端,而选择其他两种数据结构的具体原因后面再说。

2 匹配查询
利用hash表的hget或hmget可以实现dept='IT'或者dept in ('IT', 'QA')这种单值或多值的完全匹配查询。拿到id列表后,再去查询key-value获得到对象。
3 范围查询
因为我们将age保存成zSet的score,value是id,所以可以利用zSet的zrangeByScore方法获得score在某一区间范围内的value值。
4 模糊查询
Redis 2.8.9后zSet加入了一个非常有用的方法zrangeByLex,我们将score都保存为0,value是姓名:id的格式,利用zrangeByLex可以获得字母在某一区间内的value值。例如,zrangeByLex name [A, (F,可以查询出Allen, Aaron, Carter。
5 分页查询
同时,zrangeByLex还支持分页查询,语法类似limit start, offset。
6 局限性
上述举例说明了几种常见查询在Redis的实现方式,但是Redis毕竟只是key-value存储,所以有很多局限性。例如,1)无法实现多条件组合的查询,例如age>25 AND name like 'A%',硬要实现的话需要多条命令并计算并集或交集。2)模糊查询中文比较费劲:

Redis中的关系查询(范围查询,模糊查询等...)的更多相关文章
- Redis中的关系查询
本文对Redis如何保存关系型数据,以及如何对其匹配.范围.模糊查询进行举例讲解,其中模糊查询功能基于最新的2.8.9以后版本. 1 关系型数据的存储 以Staff对象为例,在关系型数据库或类似Gri ...
- SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 简单概述一下本讲 别名,sql片段简单写一下,模糊查询多写一点 一.别名 <typeAliases> ...
- SQL语句中的单引号处理以及模糊查询
为了防止程序SQL语句错误以及SQL注入,单引号必须经过处理.有2种办法: 1.使用参数,比如SELECT * FROM yourTable WHERE name = @name; 在C#中使用Sql ...
- mybatis中xml字段空判断及模糊查询
由于业务特殊的查询需求,需要下面的这种查询,一直感觉模糊不清,本地测试一下顺便做个总结 贴一段xml代码,如下: <if test="receivedName != null and ...
- winform中ComboBox利用AutoComplete属性实现模糊查询(有缺陷)
上一篇文章是用ComboBox里面的原生事件实现模糊查询,操作比较灵活一些,但是收到评论说,利用AutoComplete属性就可以实现模糊查询,但是据本人所了解,AutoComplete虽然能够方便的 ...
- T-SQL简单查询语句(模糊查询)
T-SQL简单查询语句 简单查询: 1.最简单查询(查所有数据) select * from 表名: 注:* 代表所有列 select * from info 2.查询指定列 select code, ...
- 2_02_MSSQL课程_where查询和like模糊查询
1.where 条件过滤 常见的表达式过滤:比如: select * from 表 where Id>10; 多条件过滤: and or not (优先级:not > and > ...
- Mybatis通过ID查询 && 通过name模糊查询
接上篇:Mybatis环境搭建 在搭建环境时已经有了mapper和sqlMapConfig 1,数据库建表 prompt PL/SQL Developer import file prompt Cre ...
- sql server 分组查询结合日期模糊查询
分组查询: https://www.cnblogs.com/netserver/p/4518995.html 日期格式化格式: http://blog.csdn.net/qq_16769857/art ...
随机推荐
- WinJS.Binding.List与kendo.data.ObservableArray
avalon0.8一个最大目标是实现对数组的深层监控,可是面临的困难重重,至今还没有什么起色.于是看一下其他两个MVVM框架的做法(knockout, emberjs, angular都不能监听家庭数 ...
- iOS WebServiceFramework网络服务框架浅解
网络服务几乎是每一款成功APP的必备条件,打开你手机你会发现里面不用联网的应用数量十只手指可以数出来,就算是一些以独特技术切入市场的APP如美颜相机,都至少加入了分享功能.下面我先做下简单的回顾兼扫盲 ...
- HDU 1455 http://acm.hdu.edu.cn/showproblem.php?pid=1455
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #de ...
- RSS阅读器(一)——dom4j读取xml(opml)文件
接触java不久,偶有收获,最近想做一个web版RSS阅读器来锻炼一下.手头有几个从不同版本的foxmail中导出的opml文件,大家应该都知道,opml文件就是xml格式的.那么就先从这里入手,练习 ...
- sqlserver2012
sqlserver2012作死的节奏啊,微软最近怎么了?搞个sqlserver2012死活安装不上,无论如何都是.NET Framework 4报错,机器本身的版本比安装包的高就报错?微软的程序员思维 ...
- OpenStack API 与 CloudStack API 模块比较
OpenStack API Block Storage Service API Compute API Compute API extensions Identity Service API and ...
- http请求中乱码------编码的转换
在http请求中如果包含了汉字,那么就会出现乱码,引文默认的编码是ISO的,为了正常的显示,需要将编码转化为UTF或者gbk,下面提供一个辅助类. import java.io.Unsupported ...
- rxjava各种使用场景
1. 数据的三级缓存 final Observable memory = Observable.create(new Observable.OnSubscribe() { @Override publ ...
- Ext.tree.Panel Extjs 在表格中添加树结构,并实现节点移动功能
最近在用Extjs 做后台管理系统,真的非常好用.总结的东西分享一下. 先展示一下效果图 好了,开始吧! 首先说一下我的创建结构: 一.构造内容 这个函数中包括store的创建,treePanel的创 ...
- HDU 5235 Friends (2015 Multi-University Training Contest 2 搜索+剪枝)
题目链接:pid=5305">传送门 题意: n个人给定m个关系.每一个关系为x,y表示x,y是朋友.可是可能是online friends,也可能是offline friends. ...