您现在的位置是:亿华云 > IT科技
Redis存储Key的一种设计实现方式:模式匹配
亿华云2025-10-08 20:56:13【IT科技】0人已围观
简介一、前言Redis是Key-Value数据库,存储的时候需要一个***的Key值,查询的时候根据根据key值进行查询,但是Redis毕竟只是key-value存储,所以有很多局限性。例如:1)无法实现
一、存储前言
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),因此,对于数据库设计的云南idc服务商时候,我们应该对这两个属性加上索引(题外话,完全和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的依据,当然还可以通过其他的方式,但最主要的是如何去实践。
很赞哦!(6)
相关文章
- 3、不明先知,根据相关征兆预测可能发生的事件,以便提前做好准备,赶紧注册相关域名。;不差钱域名;buchaqian抢先注册,就是这种敏感类型。预言是最敏感的状态。其次,你应该有眼力。所谓眼力,就是善于从社会上时不时出现的各种热点事件中获取与事件相关的域名资源。眼力的前提是对域名领域的熟悉和丰富的知识。
- 项目里用到 Java 集合时,应该避免的一些坑
- 原来Word开发工具还能这么用,你知道吗?
- 批量删除数据,常见的大坑!!!
- 在此期间,他们每天仍在这里卖大米,在理财方面个人感情有待提高。因为现在是收米的最佳时机。
- 实测两款GitHub开源插件,坑都帮你踩过了
- 也来盘盘前端脚手架的那些事儿
- 扎心了!新年遇到的第一个Bug!
- 为什么现在中文域名觉得好?使用中文域名有什么好处?
- 详解Java开发Web应用程序的底层原理