注意:此方案仅为演示Redis 的使用,正式生产环境切勿使用!

相关文章:

Redis实战和核心原理详解(1)Centos7.0下安装Redis 5.0详细过程和使用常见问题

Redis实战和核心原理详解(2)Redis简介以及和其他缓存数据库的区别

Redis实战和核心原理详解(3)Redis常见的5种不同的数据类型详解

一、前言

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

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

 age > 25 AND name like 'A%'

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

(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事务:

<property name="enableTransactionSupport" value="true"/>

(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在拼接的时候肯定是唯一的,因此,删除的直接拼接为如下形式即可:

*39

四、总结

拼接Key的方式很简单,以常用的查询条件属性作为拼接Key的依据,当然还可以通过其他的方式,但最主要的是如何去实践。上述,很简略的介绍了一下,因为对于这个项目来说,很多的细节,以博客的形式写出来确实受限,还请大家移步代码仓库地址:

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

有什么疑问和可以改进的地方,希望多多留言,相互学习。

【视频福利】2T免费学习视频,搜索或扫描上述二维码关注微信公众号:Java后端技术(ID: JavaITWork)回复:1024,即可免费获取!内含SSM、Spring全家桶、微服务、MySQL、MyCat、集群、分布式、中间件、Linux、网络、多线程,Jenkins、Nexus、Docker、ELK等等免费学习视频,持续更新!

Redis实战和核心原理详解(4)Redis存储Key的一种设计实现方式:模式匹配相关推荐

  1. Redis实战和核心原理详解(8)使用快照RDB和AOF将Redis数据持久化到硬盘中

    一.前言 我们知道Redis是一款内存服务器,就算我们对自己的服务器足够的信任,不会出现任何软件或者硬件的故障,但也会有可能出现突然断电等情况,造成Redis服务器中的数据失效.因此,我们需要向传统的 ...

  2. 大数据是什么和大数据技术十大核心原理详解

     一.数据核心原理   从"流程"核心转变为"数据"核心   大数据时代,计算模式也发生了转变,从"流程"核心转变为"数据&quo ...

  3. 大数据技术十大核心原理详解

    一.数据核心原理--从"流程"核心转变为"数据"核心 大数据时代,计算模式也发生了转变,从"流程"核心转变为"数据"核心 ...

  4. Java Spring Data Redis实战与配置参数详解 application.properties...

    Redis作为开源分布式高并发缓存,使用范围非常广泛,主流互联网公司几乎都在使用. Java Spring Boot 2.0实战开发Redis缓存可以参考下面的步骤,Redis安装可以直接使用Linu ...

  5. Java Spring Data Redis实战与配置参数详解 application.properties

    Redis作为开源分布式高并发缓存,使用范围非常广泛,主流互联网公司几乎都在使用. Java Spring Boot 2.0实战开发Redis缓存可以参考下面的步骤,Redis安装可以直接使用Linu ...

  6. ios首次加载web_IOS_IOS中UIWebView的使用详解,一、初始化与三种加载方式 UI - phpStudy...

    IOS中UIWebView的使用详解 一.初始化与三种加载方式 UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种 ...

  7. react文字滚动插件_【赠书】Preact(React)核心原理详解

    豆皮粉儿们,又见面了,今天这一期,由字节跳动数据平台的"winge(宝丁)",带大家见识见识前端"轮子"之一Preact框架. 提到Preact,你肯定会先想到 ...

  8. react 流程图框架_【赠书】Preact(React)核心原理详解Preact(React) 核心原理解析...

    豆皮粉儿们,又见面了,今天这一期,由字节跳动数据平台的"winge(宝丁)",带大家见识见识前端"轮子"之一Preact框架. 提到Preact,你肯定会先想到 ...

  9. Rocket快速实战与高级原理详解

    ACL权限控制 可以从源码包中寻找到指定的官方文档介绍,其内容和路径如下 1.权限控制特性介绍 权限控制(ACL)主要为RocketMQ提供Topic资源级别的用户访问控制.用户在使用RocketMQ ...

最新文章

  1. python使用选择结构鉴别合法日期
  2. 微信小程序一些常见的坑
  3. Spring-AOP基础知识
  4. Linux安装和管理程序的相关知识点
  5. 160 - 13 badboy
  6. 隐藏文件或文件夹属性无法修改解决方案
  7. 通过交互式命令从github拉取项目模板并创建新项目
  8. python 2.7 input_Python2.7-fileinput
  9. js中判断数组中是否包含某元素的方法
  10. Java Spring-事务管理
  11. python中http_Python中的HTTP错误
  12. 怎么做SWOT分析模型PPT呢?
  13. 央视记者点赞京东物流 仓库分拣员变身时尚白领管理300个机器人
  14. 全球十大管理咨询公司的排名
  15. 恢复被文件夹病毒恶意隐藏的文件夹
  16. ofd转成html,基于HTML5的OFD文件在线显示的方法以及装置与流程
  17. 考研数学 第6讲 中值定理
  18. AI 机器学习实践总结
  19. mousemove实现图片鼠标跟随效果
  20. win8.1 如何查看com端口号

热门文章

  1. iOS13.2频繁「杀」后台,微信给出建议
  2. 老板叫我把几十万条Excel数据录入系统
  3. Android 内置可卸载应用报错
  4. 一周热图|辛芷蕾费德勒融情邂逅;阿迪联合贝克汉姆推跑鞋;垂直森林入选全球50座最具标志性摩天大楼...
  5. CMD实现给文件或者文件夹创建软链接
  6. java毕业设计Sketch2Mod网站Mybatis+系统+数据库+调试部署
  7. python数据库建表_Python3创建mysql数据表结构和插入数据
  8. Phoenix之协处理器
  9. day19总结和作业
  10. Android购物软件制作(毕业设计)