项目打算重构,用Redis做缓存。自己写了个业务级封装,还请各路高手帮个忙给予指点。。。
首先这个demo数据库用的是Mysql,Mybatis做的持久化中间件。
测试的数据库表:
CREATE TABLE `tb_team` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(30) DEFAULT NULL, `user_id` bigint(20) DEFAULT NULL, PRIMARY KEY (`id`), KEY `user_id` (`user_id`), CONSTRAINT `tb_team_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `tb_user` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; CREATE TABLE `tb_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(10) DEFAULT NULL, `add_date` datetime DEFAULT NULL, `team_id` bigint(20) DEFAULT NULL, PRIMARY KEY (`id`), KEY `team_id` (`team_id`), CONSTRAINT `tb_user_ibfk_1` FOREIGN KEY (`team_id`) REFERENCES `tb_team` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8;
缓存策略如下:
查询结果集缓存的是实体的缓存key,而不是整个结果集,在返回这些结果集数据时,通过这些实体key就能找到对应的hashmap,而这些hashmap就是每个实体对应的缓存数据。
按照这个策略,不适合对频繁改动的数据做缓存,因为每次的修改操作都会修改缓存。需要自行判别哪些数据访问比较频繁且不经常修改。还有的是,这里没有考虑到集群缓存的情况,紧适合单机。
整体思路:对应关系型数据库中的实体表,为需要提供缓存访问的实体表数据提供一个CommonMapper的接口,包含一组常用的数据操作方法,这组操作将会被进行缓存功能封装。
提供一个CacheService<T, D extends CommonMapper<T>>接口,对应commonMapper,提供相应的数据操作方法以及一些缓存相关的方法。有CacheServiceImpl 抽象类实现CacheService,具体在里面进行缓存数据操作的封装。该类需要被继承,由具体的子类提供其相应的实体数据的缓存存储方式(不同实体具有不一样的属性,影响到缓存数据的存储和提取)
- save,新增实体的缓存以及数据库记录,同时清除跟这个实体表相关的查询缓存。
- update, 更新实体的缓存以及数据库记录,同时清除跟这个实体表相关的查询缓存。
- delete,删除实体缓存以及数据库记录,同时清除跟这个实体表相关的查询缓存。
- deleteByIds 与delete类同。
- get,首先尝试从缓存获取,若获取不了再从数据库获取,若有,则缓存这个实体,若没有则返回null。
- selectListCacheByParam,需要用到RedisCacheSearchBuilder来操作查询参数,目的是用这些查询参数结合指定的一个业务关键字生成一个key,用于缓存查询到的实体缓存key列表,这些key对应一个缓存list,list里面存储这查询结果实体的缓存key。(参考缓存策略)
- 其他的查询如连接查询需要自己实现,但原理与selectListCacheByParam参不多,只是做缓存时对应不同的实体要操作不同的结果集实体key列表(详情看看demo里的)。
demo的结构如下(有些丑,不太会UML):
项目可以clone下来:
这是oschina的git库,github又特么访问不了
https://git.oschina.net/oham/testredis.git
大侠们帮忙看下哈,多谢指出不妥之处
相关推荐
springMVC+mybatis+shiro+redis 项目整合demo。
Spring+redis整合的demo,可以进行学习
本资源的功能是利用spring整合redis,进行了基本的操作,具体见博客地址 https://blog.csdn.net/u012150590/article/details/79862294
Ehcache、xmemcached、redis 整合spring注解demo
Spring+redis整合demo,有助于学习spring和redis
此项目是一个简单的redis整合spring加上mybatis的整合的demo全部使用注解实现,redis的配置和spring的配置整合到了一起
包含springBoot对redis操作的方法,包括测试,测试在test包里
SpringMVC+redis 简单案例,实现了简单的redis存取功能,以及springmvc的实例化功能,SpringMVC+redis 简单案例,实现了简单的redis存取功能,以及springmvc的实例化功能,SpringMVC+redis 简单案例,实现了简单的...
个人测试redis cluster spring整合代码 的demo
Spring+Redis的简单应用,作为开发人员,首先关心的是怎么用,如何整合到我们的Spring框架中。这里面我简单的将Redis整合到Spring框架.
基于maven+springmvc+redis+mybatis整合案例框架,主要实现redis的读取案例
在spring boot中集成redis,包括redis的链接配置,操作方法以及Controller的使用,直接修改properties的链接即可运行
redis使用例子,包含增删改査
练手写的springboot+duubo+zokeeper+Redis整合demo,非常适合新手。
- 提供了对不同Redis客户端的整合(Lettuce和Jedis) - 提供了RedisTemplate统一API来操作Redis - 支持Redis的发布订阅模型 - 支持Redis哨兵和Redis集群 - 支持基于Lettuce的响应式编程 - 支持基于JDK、JSON、字符串...
spring boot cache 整合 redis demo (内包含 redis windows 安装包,和redis desktop 桌面 管理工具)
我也是初学 spring boot 此项目是我踏遍一个个坑搭建起来的。原型是按网上视频讲解中来的,如果下载项目跑起来有问题 欢迎留言
springMVC+spring+mybatis+redis整合的maven demo,redis作为二级缓存
maven管理的多模块聚合的springboot+duubo+zokeeper+Redis整合demo,一个父pom文件,分为api/service/client多个子module