首页 > 数据库 >redis开发规约

redis开发规约

时间:2024-04-07 19:12:45浏览次数:15  
标签:缓存 规约 redis 开发 import new 序列化 config redisTemplate

key设计

1、可读性和可管理性

# 业务名:表名:id
getpersoninfo:person:1

2、简洁性

减少key长度,建议不超过39字节
例子 humanresource:employee:88301  -> hr:emp_88301

3、特色字符

key 不要包含特殊字符(空格,换行,引号),建议使用英文与数字

不同类型的应用场景

 序列化

JdkSerializationRedisSerializer

pojo对象的存储场景,使用jdk本身序列化机制,是默认机制,采用ObjectInputsStream/ObjectOutputStream进行序列化

StringRedisSerializer

采用string的方式序列化

Jackson2JsonRedisSerializer

利用jackson-json工具,将pojo序列化成json格式存储

GenericFastJsonRedisSerializer

javabean与json之间的转换,同时需要指定calss类型

springboot中的应用

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisTemplateConfiguration {
/**
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory
redisConnectionFactory) {
    RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
    redisTemplate.setConnectionFactory(redisConnectionFactory);
    // 使用Jackson2JsonRedisSerialize 替换默认序列化
    Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new
    Jackson2JsonRedisSerializer(Object.class);
    ObjectMapper objectMapper = new ObjectMapper();
    //对于Null值不输出
    objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
    // 设置key和value的序列化规则
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
    // 设置hashKey和hashValue的序列化规则
    redisTemplate.setHashKeySerializer(new StringRedisSerializer());
    redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
    //afterPropertiesSet和init-method之间的执行顺序是afterPropertiesSet 先执行,
    init-method 后执行。
    redisTemplate.afterPropertiesSet();
    return redisTemplate;
}

声明式缓存

@Cacheable/@CacheResult 读取/设置缓存
@CachePut 添加/更新缓存
@CacheEvict/@CacheRemove 移除缓存

springboot 使用

1、引入@EnableCaching

2、使用@Cacheable(value="查询的key",key=“#查询的具体字段”,condition=“#查询条件”,cacheManager=“缓存自定义处理方式-对应下面的cachemangager方法”)

自定义缓存处理方式

使用spring cache 的困扰

1、默认spring cache采用::分割数据,并不是约定俗称的冒号分割

2、默认使用jdk序列化,jdk序列化生成的字节流较大,应该改为json序列化

3、spring cache注解不支持expire过期时间,需要自己编写代码实现

@Configuration
public class SpringCacheConfgiration {
    @Bean
    @Primary //设置默认的CacheManager
    public CacheManager cacheManager(LettuceConnectionFactory factory){
        //加载默认Spring Cache配置信息
        RedisCacheConfiguration config =
        RedisCacheConfiguration.defaultCacheConfig();
        //设置有效期为1小时
        config = config.entryTtl(Duration.ofHours(1));
        //说明缓存Key使用单冒号进行分割
        config = config.computePrefixWith(cacheName -> cacheName + ":");
        //Redis Key采用String直接存储
        config =
config.serializeKeysWith(RedisSerializationContext.SerializationPair.from         Serializer(new StringRedisSerializer()));
        //Redis Value则将对象采用JSON形式存储
        config =
config.serializeValuesWith(RedisSerializationContext.SerializationPair.fr        omSerializer(new GenericJackson2JsonRedisSerializer()));
        //不缓存Null值对象
        config = config.disableCachingNullValues();
        //实例化CacheManger缓存管理器
        RedisCacheManager cacheManager =
        RedisCacheManager.RedisCacheManagerBuilder
            //绑定REDIS连接工厂
            .fromConnectionFactory(factory)
            //绑定配置对象
            .cacheDefaults(config)
            //与声明式事务注解@Transactional进行兼容
            .transactionAware()
            //完成对象构建
            .build();
        return cacheManager;
}
    //为不同的TTL创建不同的CacheManager
    @Bean
    public CacheManager cacheManager1m(LettuceConnectionFactory factory){
        //加载默认Spring Cache配置信息
        RedisCacheConfiguration config =
        RedisCacheConfiguration.defaultCacheConfig();
        //设置有效期为1小时
        config = config.entryTtl(Duration.ofMinutes(1));
        //说明缓存Key使用单冒号进行分割
        config = config.computePrefixWith(cacheName -> cacheName + ":");
        //Redis Key采用String直接存储
        config =
config.serializeKeysWith(RedisSerializationContext.SerializationPair.from         Serializer(new StringRedisSerializer()));
        //Redis Value则将对象采用JSON形式存储
        config =
config.serializeValuesWith(RedisSerializationContext.SerializationPair.fr         omSerializer(new GenericJackson2JsonRedisSerializer()));
        //不缓存Null值对象
        config = config.disableCachingNullValues();
        //实例化CacheManger缓存管理器
        RedisCacheManager cacheManager =
        RedisCacheManager.RedisCacheManagerBuilder
            //绑定REDIS连接工厂
            .fromConnectionFactory(factory)
            //绑定配置对象
            .cacheDefaults(config)
            //与声明式事务注解@Transactional进行兼容
            .transactionAware()
            //完成对象构建
            .build();
        return cacheManager;
    }
}

 

标签:缓存,规约,redis,开发,import,new,序列化,config,redisTemplate
From: https://www.cnblogs.com/caixiaozi/p/18119705

相关文章

  • Redis 一般有哪些使用场景?
    热点数据的缓存缓存是Redis最常见的应用场景,之所有这么使用,主要是因为Redis读写性能优异。而且逐渐有取代memcached,成为首选服务端缓存的组件。而且,Redis内部是支持事务的,在使用时候能有效保证数据的一致性。限时业务的运用redis中可以使用expire命令设置一个键的生存时间,......
  • redis基本操作
    基本类型string字符串#get/set-获取设置值setkey"value"#设置key的值为valuegetkey#获取key的值#getset-获取设置值getsetdbmongodb#没有旧值,返回nilgetsetdbredis#返回mongodb#setnx-nil时设置(分布式锁......
  • 探索基于WebRTC的有感录屏技术开发流程
    第一章:技术原理WebRTC(WebReal-TimeCommunication)是一种开放源代码项目,旨在通过浏览器之间的点对点通信实现实时音视频通信。WebRTC利用JavaScriptAPI在浏览器中实现多媒体通信,无需安装插件或第三方软件。在线录屏|一个覆盖广泛主题工具的高效在线平台(amd794.com)https:/......
  • 使用redis-server &启动redis,没有读取到最新配置
    今天搭redis主从架构的时候,使用 redis-server& 启动redis时,一直没有读取到修改后的配置文件,得使用 redis-server/home/redis-7.2.4/redis.conf& 才可以后面查了下,redis.conf配置中开头有一段注释,说明为了读取配置文件,必须在启动Redis时将配置文件路径作为第一个参数传递......
  • 鸿蒙开发火到不行!2024年你还等什么,高薪offer等你拿!
    一、鸿蒙生态:一场席卷科技圈的“狂风巨浪”鸿蒙操作系统,这个曾经只存在于华为内部研发名单上的神秘名字,如今已如狂风巨浪般席卷了整个科技圈。鸿蒙系统的诞生,不仅标志着我国在操作系统领域的重大突破,更是对全球科技格局的一次重新洗牌。它打破了传统操作系统的局限,实现了......
  • 鸿蒙开发工程师月薪能拿多少?北上广深最高6W~10W每月。
    2023年秋季,余承东在华为全场景新品发布会上宣布鸿蒙原生应用全面启动。距离发布会已过去了半年多的时间,我们可以看到,无论是积极拥抱还是半推半就,各大互联网企业都已经开始对HarmonyOSNEXT进行适配和开发。随着鸿蒙操作系统的不断成熟和推广,鸿蒙开发人才的需求也在逐渐增加......
  • ERC314协议代币开发及合约开发详解
    ERC314是一种新的代币标准,旨在为BASE链上的代币提供更便捷、高效的交易体验。它由DAPJ项目团队开发,并于2023年8月首次发布。ERC314的特点无需依赖DEX或SWAP进行交易: ERC314代币可以像原生代币一样直接转账,无需借助DEX或SWAP进行交易。这使得交易更加......
  • 学习 Git 基础知识 - 日常开发任务手册
    欢迎来到我关于Git的综合指南,Git是一种分布式版本控制系统,已经在软件开发中彻底改变了协作和代码管理方式。无论你是经验丰富的开发者还是刚开始编程之旅的新手,理解Git对于正确掌控代码、高效管理项目和与他人合作至关重要。在本教程中,我将带领你了解Git的基础知识......
  • java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus
    鸿鹄工程项目管理系统SpringCloud+SpringBoot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统项目背景一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的提升提出了更高的要......
  • java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus
     鸿鹄工程项目管理系统SpringCloud+SpringBoot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统项目背景一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的提升提出了更高的......