千家信息网

springboot集成redis的方法

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,今天小编给大家分享一下springboot集成redis的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下
千家信息网最后更新 2025年01月22日springboot集成redis的方法

今天小编给大家分享一下springboot集成redis的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1. pom.xml添加依赖

            org.springframework.boot        spring-boot-starter                org.springframework.boot        spring-boot-starter-web                org.projectlombok        lombok        true                org.springframework.boot        spring-boot-starter-test        test                    org.springframework.boot        spring-boot-starter-data-redis    

2. application-dev.xml配置

#单机模式spring:    redis:    host: 192.168.56.101 # Redis服务器地址    database: 0 # Redis数据库索引(默认为0)    port: 6379 # Redis服务器连接端口    password: redis # Redis服务器连接密码(默认为空)    timeout: 300ms # 连接超时时间(毫秒)

# 哨兵模式

spring:  redis:    sentinel:      master: mymaster      nodes: 192.168.56.101:26379,192.168.56.102:26379,192.168.56.103:26379      password: redis

3. java config配置(单节点)

package com.powertrade.redis.common.config;import com.fasterxml.jackson.annotation.JsonAutoDetect;import com.fasterxml.jackson.annotation.PropertyAccessor;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;import org.springframework.cache.annotation.EnableCaching;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.cache.RedisCacheConfiguration;import org.springframework.data.redis.cache.RedisCacheManager;import org.springframework.data.redis.cache.RedisCacheWriter;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.RedisSerializationContext;import org.springframework.data.redis.serializer.RedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;import java.time.Duration;/** * Redis单机配置 */@EnableCaching@Configurationpublic class BaseRedisConfig {    @Bean    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {        RedisSerializer serializer = redisSerializer();        RedisTemplate redisTemplate = new RedisTemplate<>();        redisTemplate.setConnectionFactory(redisConnectionFactory);        redisTemplate.setKeySerializer(new StringRedisSerializer());        redisTemplate.setValueSerializer(serializer);        redisTemplate.setHashKeySerializer(new StringRedisSerializer());        redisTemplate.setHashValueSerializer(serializer);        redisTemplate.afterPropertiesSet();        return redisTemplate;    }    @Bean    public RedisSerializer redisSerializer() {        //创建JSON序列化器        Jackson2JsonRedisSerializer 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;    }    @Bean    public 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);    }}

4. 哨兵机制 (多节点配置)

package com.powertrade.redis.common.config;import com.fasterxml.jackson.annotation.JsonAutoDetect;import com.fasterxml.jackson.annotation.PropertyAccessor;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;import org.springframework.beans.factory.annotation.Value;import org.springframework.cache.annotation.EnableCaching;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.cache.RedisCacheConfiguration;import org.springframework.data.redis.cache.RedisCacheManager;import org.springframework.data.redis.cache.RedisCacheWriter;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.connection.RedisNode;import org.springframework.data.redis.connection.RedisPassword;import org.springframework.data.redis.connection.RedisSentinelConfiguration;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;import org.springframework.data.redis.serializer.RedisSerializationContext;import org.springframework.data.redis.serializer.RedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;import java.time.Duration;/** * Redis哨兵机制配置 */@EnableCaching@Configurationpublic class BaseRedisConfig {    @Value("${spring.redis.sentinel.nodes}")    private String redisNodes;    @Value("${spring.redis.sentinel.master}")    private String master;    @Value("${spring.redis.sentinel.password}")    private String password;    /**     * redis哨兵配置     */    @Bean    public RedisSentinelConfiguration redisSentinelConfiguration(){        RedisSentinelConfiguration configuration = new RedisSentinelConfiguration();        String[] host = redisNodes.split(",");        for(String redisHost : host){            String[] item = redisHost.split(":");            String ip = item[0];            String port = item[1];            configuration.addSentinel(new RedisNode(ip, Integer.parseInt(port)));        }        configuration.setPassword(RedisPassword.of(password));        configuration.setMaster(master);        return configuration;    }    @Bean    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {        RedisSerializer serializer = redisSerializer();        RedisTemplate redisTemplate = new RedisTemplate<>();        redisTemplate.setConnectionFactory(redisConnectionFactory);        redisTemplate.setKeySerializer(new StringRedisSerializer());        redisTemplate.setValueSerializer(serializer);        redisTemplate.setHashKeySerializer(new StringRedisSerializer());        redisTemplate.setHashValueSerializer(serializer);        redisTemplate.afterPropertiesSet();        return redisTemplate;    }    @Bean    public RedisSerializer redisSerializer() {        //创建JSON序列化器        Jackson2JsonRedisSerializer 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;    }    @Bean    public 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);    }    }

5. redis工具类

package com.powertrade.redis.common.utils;import lombok.RequiredArgsConstructor;import org.springframework.data.redis.core.BoundSetOperations;import org.springframework.data.redis.core.HashOperations;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.ValueOperations;import org.springframework.stereotype.Component;import java.util.Collection;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import java.util.concurrent.TimeUnit;@Component@RequiredArgsConstructorpublic class RedisCache{    public final RedisTemplate redisTemplate;    /**     * 缓存基本的对象,Integer、String、实体类等     *     * @param key 缓存的键值     * @param value 缓存的值     */    public  void setCacheObject(final String key, final T value)    {        redisTemplate.opsForValue().set(key, value);    }    /**     * 缓存基本的对象,Integer、String、实体类等     *     * @param key 缓存的键值     * @param value 缓存的值     * @param timeout 时间     * @param timeUnit 时间颗粒度     */    public  void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)    {        redisTemplate.opsForValue().set(key, value, timeout, timeUnit);    }    /**     * 设置有效时间     *     * @param key Redis键     * @param timeout 超时时间     * @return true=设置成功;false=设置失败     */    public boolean expire(final String key, final long timeout)    {        return expire(key, timeout, TimeUnit.SECONDS);    }    /**     * 设置有效时间     *     * @param key Redis键     * @param timeout 超时时间     * @param unit 时间单位     * @return true=设置成功;false=设置失败     */    public boolean expire(final String key, final long timeout, final TimeUnit unit)    {        return redisTemplate.expire(key, timeout, unit);    }    /**     * 获得缓存的基本对象。     *     * @param key 缓存键值     * @return 缓存键值对应的数据     */    public  T getCacheObject(final String key)    {        ValueOperations operation = redisTemplate.opsForValue();        return operation.get(key);    }    /**     * 删除单个对象     *     * @param key     */    public boolean deleteObject(final String key)    {        return redisTemplate.delete(key);    }    /**     * 删除集合对象     *     * @param collection 多个对象     * @return     */    public long deleteObject(final Collection collection)    {        return redisTemplate.delete(collection);    }    /**     * 缓存List数据     *     * @param key 缓存的键值     * @param dataList 待缓存的List数据     * @return 缓存的对象     */    public  long setCacheList(final String key, final List dataList)    {        Long count = redisTemplate.opsForList().rightPushAll(key, dataList);        return count == null ? 0 : count;    }    /**     * 获得缓存的list对象     *     * @param key 缓存的键值     * @return 缓存键值对应的数据     */    public  List getCacheList(final String key)    {        return redisTemplate.opsForList().range(key, 0, -1);    }    /**     * 缓存Set     *     * @param key 缓存键值     * @param dataSet 缓存的数据     * @return 缓存数据的对象     */    public  BoundSetOperations setCacheSet(final String key, final Set dataSet)    {        BoundSetOperations setOperation = redisTemplate.boundSetOps(key);        Iterator it = dataSet.iterator();        while (it.hasNext())        {            setOperation.add(it.next());        }        return setOperation;    }    /**     * 获得缓存的set     *     * @param key     * @return     */    public  Set getCacheSet(final String key)    {        return redisTemplate.opsForSet().members(key);    }    /**     * 缓存Map     *     * @param key     * @param dataMap     */    public  void setCacheMap(final String key, final Map dataMap)    {        if (dataMap != null) {            redisTemplate.opsForHash().putAll(key, dataMap);        }    }    /**     * 获得缓存的Map     *     * @param key     * @return     */    public  Map getCacheMap(final String key)    {        return redisTemplate.opsForHash().entries(key);    }    /**     * 往Hash中存入数据     *     * @param key Redis键     * @param hKey Hash键     * @param value 值     */    public  void setCacheMapValue(final String key, final String hKey, final T value)    {        redisTemplate.opsForHash().put(key, hKey, value);    }    /**     * 获取Hash中的数据     *     * @param key Redis键     * @param hKey Hash键     * @return Hash中的对象     */    public  T getCacheMapValue(final String key, final String hKey)    {        HashOperations opsForHash = redisTemplate.opsForHash();        return opsForHash.get(key, hKey);    }    /**     * 获取多个Hash中的数据     *     * @param key Redis键     * @param hKeys Hash键集合     * @return Hash对象集合     */    public  List getMultiCacheMapValue(final String key, final Collection hKeys)    {        return redisTemplate.opsForHash().multiGet(key, hKeys);    }    /**     * 获得缓存的基本对象列表     *     * @param pattern 字符串前缀     * @return 对象列表     */    public Collection keys(final String pattern)    {        return redisTemplate.keys(pattern);    }}

以上就是"springboot集成redis的方法"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

0