当前位置: 首页 > news >正文

后端项目开发:整合redis缓存

因为各种场合比如门户和后台,需要不同的redis配置,我们在common包配置通用的reids配置。

1.新建service目录,建立RedisService服务接口,同时编写工具类实现该接口。

public interface RedisService {/*** 保存属性*/void set(String key, Object value, long time);/*** 保存属性*/void set(String key, Object value);/*** 获取属性*/Object get(String key);/*** 删除属性*/Boolean del(String key);/*** 批量删除属性*/Long del(List<String> keys);/*** 设置过期时间*/Boolean expire(String key, long time);/*** 获取过期时间*/Long getExpire(String key);/*** 判断是否有该属性*/Boolean hasKey(String key);/*** 按delta递增*/Long incr(String key, long delta);/*** 按delta递减*/Long decr(String key, long delta);/*** 获取Hash结构中的属性*/Object hGet(String key, String hashKey);/*** 向Hash结构中放入一个属性*/Boolean hSet(String key, String hashKey, Object value, long time);/*** 向Hash结构中放入一个属性*/void hSet(String key, String hashKey, Object value);/*** 直接获取整个Hash结构*/Map<Object, Object> hGetAll(String key);/*** 直接设置整个Hash结构*/Boolean hSetAll(String key, Map<String, Object> map, long time);/*** 直接设置整个Hash结构*/void hSetAll(String key, Map<String, ?> map);/*** 删除Hash结构中的属性*/void hDel(String key, Object... hashKey);/*** 判断Hash结构中是否有该属性*/Boolean hHasKey(String key, String hashKey);/*** Hash结构中属性递增*/Long hIncr(String key, String hashKey, Long delta);/*** Hash结构中属性递减*/Long hDecr(String key, String hashKey, Long delta);/*** 获取Set结构*/Set<Object> sMembers(String key);/*** 向Set结构中添加属性*/Long sAdd(String key, Object... values);/*** 向Set结构中添加属性*/Long sAdd(String key, long time, Object... values);/*** 是否为Set中的属性*/Boolean sIsMember(String key, Object value);/*** 获取Set结构的长度*/Long sSize(String key);/*** 删除Set结构中的属性*/Long sRemove(String key, Object... values);/*** 获取List结构中的属性*/List<Object> lRange(String key, long start, long end);/*** 获取List结构的长度*/Long lSize(String key);/*** 根据索引获取List中的属性*/Object lIndex(String key, long index);/*** 向List结构中添加属性*/Long lPush(String key, Object value);/*** 向List结构中添加属性*/Long lPush(String key, Object value, long time);/*** 向List结构中批量添加属性*/Long lPushAll(String key, Object... values);/*** 向List结构中批量添加属性*/Long lPushAll(String key, Long time, Object... values);/*** 从List结构中移除属性*/Long lRemove(String key, long count, Object value);
}

2.在config目录下,编写redis通用配置

public class BaseRedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisSerializer<Object> serializer = redisSerializer();RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory);redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(serializer);redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(serializer);redisTemplate.afterPropertiesSet();return redisTemplate;}@Beanpublic RedisSerializer<Object> redisSerializer() {//创建JSON序列化器Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);ObjectMapper objectMapper = new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);//必须设置,否则无法将JSON转化为对象,会转化成Map类型objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL);serializer.setObjectMapper(objectMapper);return serializer;}@Beanpublic RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory) {RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);//设置Redis缓存有效期为1天RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer())).entryTtl(Duration.ofDays(1));return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);}@Beanpublic RedisService redisService(){return new RedisServiceImpl();}}

3.其他包只需要继承该基础配置就够了

@EnableCaching
@Configuration
public class RedisConfig extends BaseRedisConfig {
}
http://www.lryc.cn/news/138268.html

相关文章:

  • 美国访问学者签证好办吗?
  • Linux之基础IO文件系统讲解
  • Django主要特点
  • element-ui中的el-table合并单元格
  • 自组织地图 (SOM) — 介绍、解释和实现
  • Arduino程序设计(四)按键消抖+按键计数
  • Scrum Guide Chinese Simplified.pdf
  • Module not found: Error: Can‘t resolve ‘vue-pdf‘ in ‘xxx‘
  • ELK之LogStash介绍及安装配置
  • docker学习(1)
  • UE5 Niagara基础知识讲解
  • 缓存穿透、缓存击穿和缓存雪崩
  • 自动化编排工具Terraform介绍(一)
  • zhm_real/MotionPlanning运动规划库中A*算法源码详细解读
  • SpringMVC中Controller层获取前端请求参数的几种方式
  • 记Flask-Migrate迁移数据库失败的两个Bug——详解循环导入问题
  • 在线求助。。npm i 报错,连公司内部网,无法连外网
  • TCP/UDP/IP协议简介
  • 写点感想3:关于本人近期的说明与一点感受
  • opencv-全景图像拼接
  • 如何将下载的安装包导入PyCharm
  • 【redis问题】Caused by: io.netty.channel
  • Elasticsearch 处理地理信息
  • ARM开发,stm32mp157a-A7核IIC实验(采集温湿度传感器值)
  • 021-从零搭建微服务-短信服务(一)
  • 基于jenkins自动化部署PHP环境
  • 数据库表结构导出为word、html、markdown【转载,已解决,已验证,开源】
  • 【计算机视觉|生成对抗】用于高保真自然图像合成的大规模GAN训练用于高保真自然图像合成的大规模GAN训练(BigGAN)
  • 三维重建_体素重建_空间雕刻法/体素着色法
  • 4-redis哨兵搭建安装