当前位置:大数据采集存储 → 正文

redis存储key实现方式:模式匹配 -凯发k8国际首页登录

责任编辑:fjin 作者:徐刘根 |来源:企业网d1net  2018-07-19 15:50:16 本文摘自:java后端技术

一、前言

redis是key-value数据库,存储的时候需要一个唯一的key值,查询的时候根据根据key值进行查询,但是redis毕竟只是key-value存储,所以有很多局限性。例如:

(1)无法实现多条件组合的查询,如:

 

 

硬要实现的话需要多条命令并计算并集或交集。

(2)模糊查询中文比较费劲;

因此,如何设计一个合适的key来优化我们的查询操作,是一个比较有意义的事情。

对于key的设计网上有很多资料,但对我来说,都太过于凌乱,并没有找到一个合适的方案。下边,和大家一起学习一种较为简单的模式匹配方式的key值设计方法。

 

 

下边的学习,主要介绍项目中使用的方式,有兴趣的同学可以clone代码一起学习,仓库地址:

https://git.oschina.net/xuliugen/redis-demo.git

二、项目结构

ssm框架(spring spring mvc mybatis),除了实现了对redis的存储,还通过注解的方式实现了数据库的读写分离功能,实现了spring对数据库和redis的事务管理,jsr303校验,以及简单的领域驱动ddd思想项目。

(1)项目结构:

(2)数据库脚本:

 

 

 

 

 

 

(3)spring配置文件位置:

 

 

其中,db-redis.xml文件中,如下代码表示开启redis事务:

 

 

(4)redis和mybatis代码位置:

 

 

三、key值设计

上述,大致看了依托的项目结构,还没有开始redis key值得设计,因此可以跳过,下边主要学习一下,如何设计一种key实现模式匹配查询方式。

(1)情景假设

有实体对象securityuserdto,如下:

 

 

这里假设用户对象最常用的查询条件是:用户名(username)和单位类型(unittype),因此,对于数据库设计的时候,我们应该对这两个属性加上索引(题外话,完全和key的设计无关!只是在于点一下这种最常见的数据库加索引的方式)。

 

 

数据库做了索引,那我,我们将数据存储到redis中的时候,如何在把他取出来那?

(2)首先,看一下最终存放在redis中的数据格式:

 

 

其中:

su1_县级单位_wangwu_0000000035

可以分为四个部分:

 

 

1、简化的实体对象名称,就是securityuserdto的简写,为了缩短key的长度;

2、unittype的值,第一个查询条件;

3、username的值,第二个查询条件;

4、id的值,十位数值,前边不足十位补0;

(3)如何拼接,核心代码如下:

 

 

assemblerediskeyprefix()方法:

 

 

assemberidforkey()方法:

 

 

到这里,基本已经知道了大致拼接的过程,因此存放到redis的数据是如下格式:

 

 

注:可以securityusercontroller#adduser(securityuserdto userdto)方法测试效果。

(4)如何查询:

查询的话可以参考securityusercontroller#listbycondition()方法:

 

 

查询的时候,也是需要根据查询条件构造key值,然后读取数据。

如果,查询条件都有的话,构造的key值如下:

 

 

如果,查询条件只有一个的话,构造的key值如下:

 

 

(5)修改数据和删除数据:

因为id在拼接的时候肯定是唯一的,因此,删除的直接拼接为如下形式即可:

 

 

四、总结

拼接key的方式很简单,以常用的查询条件属性作为拼接key的依据,当然还可以通过其他的方式,但最主要的是如何去实践。

 

关键字:凯发k8国际首页登录

本文摘自:java后端技术

x redis存储key实现方式:模式匹配 扫一扫
分享本文到朋友圈
凯发k8国际首页登录
当前位置:大数据采集存储 → 正文

责任编辑:fjin 作者:徐刘根 |来源:企业网d1net  2018-07-19 15:50:16 本文摘自:java后端技术

一、前言

redis是key-value数据库,存储的时候需要一个唯一的key值,查询的时候根据根据key值进行查询,但是redis毕竟只是key-value存储,所以有很多局限性。例如:

(1)无法实现多条件组合的查询,如:

 

 

硬要实现的话需要多条命令并计算并集或交集。

(2)模糊查询中文比较费劲;

因此,如何设计一个合适的key来优化我们的查询操作,是一个比较有意义的事情。

对于key的设计网上有很多资料,但对我来说,都太过于凌乱,并没有找到一个合适的方案。下边,和大家一起学习一种较为简单的模式匹配方式的key值设计方法。

 

 

下边的学习,主要介绍项目中使用的方式,有兴趣的同学可以clone代码一起学习,仓库地址:

https://git.oschina.net/xuliugen/redis-demo.git

二、项目结构

ssm框架(spring spring mvc mybatis),除了实现了对redis的存储,还通过注解的方式实现了数据库的读写分离功能,实现了spring对数据库和redis的事务管理,jsr303校验,以及简单的领域驱动ddd思想项目。

(1)项目结构:

(2)数据库脚本:

 

 

 

 

 

 

(3)spring配置文件位置:

 

 

其中,db-redis.xml文件中,如下代码表示开启redis事务:

 

 

(4)redis和mybatis代码位置:

 

 

三、key值设计

上述,大致看了依托的项目结构,还没有开始redis key值得设计,因此可以跳过,下边主要学习一下,如何设计一种key实现模式匹配查询方式。

(1)情景假设

有实体对象securityuserdto,如下:

 

 

这里假设用户对象最常用的查询条件是:用户名(username)和单位类型(unittype),因此,对于数据库设计的时候,我们应该对这两个属性加上索引(题外话,完全和key的设计无关!只是在于点一下这种最常见的数据库加索引的方式)。

 

 

数据库做了索引,那我,我们将数据存储到redis中的时候,如何在把他取出来那?

(2)首先,看一下最终存放在redis中的数据格式:

 

 

其中:

su1_县级单位_wangwu_0000000035

可以分为四个部分:

 

 

1、简化的实体对象名称,就是securityuserdto的简写,为了缩短key的长度;

2、unittype的值,第一个查询条件;

3、username的值,第二个查询条件;

4、id的值,十位数值,前边不足十位补0;

(3)如何拼接,核心代码如下:

 

 

assemblerediskeyprefix()方法:

 

 

assemberidforkey()方法:

 

 

到这里,基本已经知道了大致拼接的过程,因此存放到redis的数据是如下格式:

 

 

注:可以securityusercontroller#adduser(securityuserdto userdto)方法测试效果。

(4)如何查询:

查询的话可以参考securityusercontroller#listbycondition()方法:

 

 

查询的时候,也是需要根据查询条件构造key值,然后读取数据。

如果,查询条件都有的话,构造的key值如下:

 

 

如果,查询条件只有一个的话,构造的key值如下:

 

 

(5)修改数据和删除数据:

因为id在拼接的时候肯定是唯一的,因此,删除的直接拼接为如下形式即可:

 

 

四、总结

拼接key的方式很简单,以常用的查询条件属性作为拼接key的依据,当然还可以通过其他的方式,但最主要的是如何去实践。

 

关键字:凯发k8国际首页登录

本文摘自:java后端技术

回到顶部
"));
"));

关于凯发k8国际首页登录联系凯发k8国际首页登录隐私条款广告服务凯发k8国际首页登录的友情链接投稿中心凯发k8国际首页登录的招贤纳士

企业网凯发k8国际首页登录的版权所有 ©2010-2024

^
网站地图