• springboot集成Redis


    springboot集成Redis

    前言

    Redis是目前使用的非常广泛的内存数据库,相比memcached,它支持更加丰富的数据类型。本来简要介绍在springboot中使用redis的方法。

    如何使用?

    1、引入spring-boot-starter-redis

    
    
        org.springframework.boot
        spring-boot-starter-data-redis
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、在application.properties增加Redis的配置

    # 使用的数据库(0-15),默认为0
    spring.redis.database=0  
    # Redis服务器地址
    spring.redis.host=127.0.0.1
    # Redis服务器连接端口
    spring.redis.port=6379  
    # Redis服务器连接密码(默认为空)
    spring.redis.password=  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、使用

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    
    @RequestMapping(value = "/redis/{key}/{value}",method = RequestMethod.GET)
    @ResponseBody
    public String redisTest(@PathVariable String key,@PathVariable String value) {
        String redisValue = stringRedisTemplate.opsForValue().get(key);
        if (StringUtils.isEmpty(redisValue)) {
            stringRedisTemplate.opsForValue().set(key,value);
            return "操作成功!";
        }
    
        if (!redisValue.equals(value)) {
            stringRedisTemplate.opsForValue().set(key,value);
            return "操作成功!";
        }
    
        return String.format("redis中已存在[key=%s,value=%s]的数据!",key,value);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    随便写的一个例子。

    4、Sentinel模式配置
    上面的是单机的一个配置,如果是主从,参考:

    #redis配置
    spring.redis.database=0
    spring.redis.password=system
    spring.redis.pool.max-idle=10
    spring.redis.pool.min-idle=0
    spring.redis.pool.max-active=10
    spring.redis.pool.max-wait=-1
    spring.redis.sentinel.master=mymaster
    spring.redis.sentinel.nodes=192.168.74.135:26379,192.168.74.136:26379
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    5、redis的全部配置:

    # REDIS (RedisProperties)
    spring.redis.cluster.max-redirects= # Maximum number of redirects to follow when executing commands across the cluster.
    spring.redis.cluster.nodes= # Comma-separated list of "host:port" pairs to bootstrap from.
    spring.redis.database=0 # Database index used by the connection factory.
    spring.redis.url= # Connection URL, will override host, port and password (user will be ignored), e.g. redis://user:password@example.com:6379
    spring.redis.host=localhost # Redis server host.
    spring.redis.password= # Login password of the redis server.
    spring.redis.ssl=false # Enable SSL support.
    spring.redis.pool.max-active=8 # Max number of connections that can be allocated by the pool at a given time. Use a negative value for no limit.
    spring.redis.pool.max-idle=8 # Max number of "idle" connections in the pool. Use a negative value to indicate an unlimited number of idle connections.
    spring.redis.pool.max-wait=-1 # Maximum amount of time (in milliseconds) a connection allocation should block before throwing an exception when the pool is exhausted. Use a negative value to block indefinitely.
    spring.redis.pool.min-idle=0 # Target for the minimum number of idle connections to maintain in the pool. This setting only has an effect if it is positive.
    spring.redis.port=6379 # Redis server port.
    spring.redis.sentinel.master= # Name of Redis server.
    spring.redis.sentinel.nodes= # Comma-separated list of host:port pairs.
    spring.redis.timeout=0 # Connection timeout in milliseconds.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    6、使用redis自动缓存数据
    可以把一些经常查询的数据放到redis缓存起来,不用每次都查询数据库。
    上面是手动缓存到redis,这里介绍一下如何自动数据缓存到redis。

    a.增加一个redis的配置类:

    @Configuration
    @EnableCaching
    public class RedisConfig{
    
        @Bean
        public KeyGenerator redisKeyGenerator(){
            return new KeyGenerator() {
                @Override
                public Object generate(Object target, Method method, Object... params) {
                    StringBuilder sb = new StringBuilder();
                    sb.append(target.getClass().getName());
                    sb.append(method.getName());
                    for (Object obj : params) {
                        sb.append(obj.toString());
                    }
                    return sb.toString();
                }
            };
    
        }
    
        @Bean
        public CacheManager cacheManager(
                @SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {
            return new RedisCacheManager(redisTemplate);
        }
    
        @Bean
        public RedisTemplate redisTemplate(
                RedisConnectionFactory factory) {
            StringRedisTemplate template = new StringRedisTemplate(factory);
            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
            ObjectMapper om = new ObjectMapper();
            om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
            jackson2JsonRedisSerializer.setObjectMapper(om);
            template.setValueSerializer(jackson2JsonRedisSerializer);
            template.afterPropertiesSet();
            return template;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    b.在需要缓存的service方法上加上注解:

    @Cacheable(value = "userCache")
    public TUser findById(String id) {
        return this.userRepository.findOne(id);
    }
    
    • 1
    • 2
    • 3
    • 4

    这样,就只有redis没有相应的Key的时候才会查询数据库。

    我们看下redis:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-acQEuzOf-1661363267785)(http://omh46px9n.bkt.clouddn.com/17-8-4/57679669.jpg)]

    图中,redis的key就是你的参数。

  • 相关阅读:
    如何排查oracle连接数不足问题
    Vue 中 v-if 和 v-show 有什么区别?
    AUTOSAR知识点 之 Dcm (一):基础知识梳理
    面试字节跳动java岗被算法吊打,60天苦修这些笔记,侥幸收获offer
    解读先电2.4版 iaas-install-mysql.sh 脚本
    c++ queue用法 入门必看 超详细
    原型-设计模式
    安卓毕业设计各种app项目,Android毕设设计,Android课程设计,毕业论文
    Jenkins持续集成、持续部署(CICD)-尚硅谷(含自己整理的前端、后端项目部署详细步骤)
    二叉搜索树
  • 原文地址:https://blog.csdn.net/m0_54853420/article/details/126515971