RedisTemplate的操作和用法

Redis

含义

redis是以k-v存储的非关系型数据库,它的数据类型有String、list、map、set、zset

RedisTemplate的配置

pom.xml

java 复制代码
<!-- Redis 相关依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.6.3</version>
        </dependency>

配置类

java 复制代码
@Configuration
public class RedisConfig {
    @Value("${spring.redis.host}")
    private String hostName;

    @Value("${spring.redis.port}")
    private int port;

    @Value("${spring.redis.password}")
    private String password;

    @Value("${spring.redis.database}")
    private int database;

    // 创建 Redis 连接工厂
    @Bean
    public JedisConnectionFactory redisConnectionFactory() {
        JedisConnectionFactory factory = new JedisConnectionFactory();
        factory.setHostName(hostName);
        factory.setPort(port);
        factory.setPassword(password);
        factory.setDatabase(database);
        factory.setUsePool(true);

        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(30);
        jedisPoolConfig.setMaxIdle(10);
        jedisPoolConfig.setMinIdle(5);
        jedisPoolConfig.setMaxWaitMillis(3000);
        factory.setPoolConfig(jedisPoolConfig);

        factory.afterPropertiesSet();
        return factory;
    }

    // 创建 RedisTemplate 对象,用于操作 Redis 数据库
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {

        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);

        // 设置默认的 serialize 和 deserialize 的方式
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

    @Bean
    public RedisCacheManager redisCacheManager(RedisConnectionFactory factory) {
//        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer =
//                new Jackson2JsonRedisSerializer(Object.class);
//
//        //解决查询缓存转换异常的问题
//        ObjectMapper mapper = new ObjectMapper();
//        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//        mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
//        jackson2JsonRedisSerializer.setObjectMapper(mapper);

        //配置序列化解决乱码问题
        RedisCacheConfiguration cacheConfig = RedisCacheConfiguration.defaultCacheConfig()
                // 设置缓存过期时间  为解决缓存雪崩,所以将过期时间加随机值,设置10分钟
                .entryTtl(Duration.ofMinutes(10))
                //设置缓存前缀
                .prefixCacheNameWith("cache:user")
                //设置key的序列化
                .serializeKeysWith(keyPair())
                //设置value的序列化
                .serializeValuesWith(valuePair())
                //为了防止缓存击穿,允许存null值
                .disableCachingNullValues();

        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                //设置过期时间30秒
                .entryTtl(Duration.ofSeconds(30))
                //设置缓存前缀
                .prefixCacheNameWith("cache:admin")
                .disableCachingNullValues()
                .serializeKeysWith(keyPair())
                .serializeValuesWith(valuePair());


        return RedisCacheManager.builder(factory)
                .withCacheConfiguration("user",cacheConfig)
                .withCacheConfiguration("admin",redisCacheConfiguration)
                .build();
    }

    /**
     * 配置键序列化
     * @return StringRedisSerializer
     */
    private RedisSerializationContext.SerializationPair<String> keyPair() {
        return RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer());
    }

    /**
     * 配置值序列化,使用 GenericJackson2JsonRedisSerializer 替换默认序列化
     * @return GenericJackson2JsonRedisSerializer
     */
    private RedisSerializationContext.SerializationPair<Object> valuePair() {
        return RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer());
    }
}

yml文件

java 复制代码
spring:
  redis:
    host: 192.168.64.3
    database: 0
    port: 6379
    password:
    jedis:
      pool:
        max-active: 50
        max-idle: 50
    timeout: 1000

RedisTemplate常用方法

使用方法如下:RedisTemplate常用方法详细操作

相关推荐
TT哇5 小时前
【实习】数字营销系统 银行经理端(interact_bank)前端 Vue 移动端页面的 UI 重构与优化
java·前端·vue.js·ui
Elieal6 小时前
SpringBoot 数据层开发与企业信息管理系统实战
java·spring boot·后端
识君啊6 小时前
MyBatis-Plus 逻辑删除导致唯一索引冲突的解决方案
java·spring boot·mybatis·mybatis-plus·唯一索引·逻辑删除
Coder_Boy_6 小时前
Java开发者破局指南:跳出内卷,借AI赋能,搭建系统化知识体系
java·开发语言·人工智能·spring boot·后端·spring
QT.qtqtqtqtqt6 小时前
SQL注入漏洞
java·服务器·sql·安全
独自破碎E6 小时前
BISHI23 小红书推荐系统
java·后端·struts
xqqxqxxq6 小时前
Java IO 核心:BufferedReader/BufferedWriter & PrintStream/PrintWriter 技术笔记
java·笔记·php
Aric_Jones6 小时前
idea使用.env运行SpringBoot项目
java·spring boot·intellij-idea
刘一说6 小时前
Java 中实现多租户架构:数据隔离策略与实践指南
java·oracle·架构
beata6 小时前
Java基础-9:深入 Java 虚拟机(JVM):从底层源码到核心原理的全面解析
java·后端