Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介( 四 )


一、项目结构
【Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介】SSM框架(Spring+SpringMVC+MyBatis) , 除了实现了对Redis的存储 , 还通过注解的方式实现了数据库的读写分离功能 , 实现了Spring对数据库和Redis的事务管理 , JSR303校验 , 以及简单的领域驱动DDD思想项目 。
(1)项目结构:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
(2)数据库脚本:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
(3)Spring配置文件位置:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
其中 , db-redis.xml文件中 , 如下代码表示开启Redis事务:
(4)Redis和MyBatis代码位置:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
二、Key值设计
上述 , 大致看了依托的项目结构 , 还没有开始RedisKey值得设计 , 因此可以跳过 , 下边主要学习一下 , 如何设计一种Key实现模式匹配查询方式 。
(1)情景假设
有实体对象SecurityUserDTO , 如下:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
这里假设用户对象最常用的查询条件是:用户名(userName)和单位类型(unitType) , 因此 , 对于数据库设计的时候 , 我们应该对这两个属性加上索引(题外话 , 完全和Key的设计无关!只是在于点一下这种最常见的数据库加索引的方式) 。
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
数据库做了索引 , 那我 , 我们将数据存储到Redis中的时候 , 如何在把他取出来那?
(2)首先 , 看一下最终存放在Redis中的数据格式:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
其中:SU1_县级单位_wangwu_0000000035
可以分为四个部分:
1、简化的实体对象名称 , 就是SecurityUserDTO的简写 , 为了缩短Key的长度;2、unitType的值 , 第一个查询条件;3、userName的值 , 第二个查询条件;4、ID的值 , 十位数值 , 前边不足十位补0;
(3)如何拼接 , 核心代码如下:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
assembleRedisKeyPrefix()方法:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
assemberIdForKey()方法:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
到这里 , 基本已经知道了大致拼接的过程 , 因此存放到Redis的数据是如下格式:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
注:可以SecurityUserController#addUser(SecurityUserDTOuserDTO)方法测试效果 。
(4)如何查询:
查询的话可以参考SecurityUserController#listByCondition()方法:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
查询的时候 , 也是需要根据查询条件构造Key值 , 然后读取数据 。
如果 , 查询条件都有的话 , 构造的Key值如下: