SpringBoot+Redis练习demo

本博客仅为个人笔记,无指导和教学作用。
参考博客: https://segmentfault.com/a/1190000039341264

  1. 什么是redis?
    一种内存性非关系数据库,存储使用键值对的方式,查询速度极快。带有5种专属数据类型和操作命令。
    五种数据类型为:
    STRING:字符串或浮点型
    LIST:链表,每个节点包含了一个字符串
    SET:无序集合
    HASH:无序散列表
    ZSET:字符串成员与浮点数分值之间的有序映射
    关于每种数据类型的基本操作,查看redis实战里面有详细介绍。

  2. 在SpringBoot中配置redis
    总结步骤为:配置->初始化factory->创建redistemplate实例->连接factory
    1)采用docker来启动redis。
    运行: docker run -itd --name redis -p 6379:6379 redis,输入docker exec -it redis redis-cli进入容器查看redis是否运行成功。
    如果输出127.0.0.1:6379就表明成功

2)在工程项目中添加依赖:
implementation’org.springframework.boot:spring-boot-starter-data-redis’
implementation’org.apache.commons:commons-pool2’
(groupId):(artifactId)

3)自定义配置参数

· spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password:
    lettuce:
      pool:
        #最大连接数
        max-active: 32
        #连接超时(ms)
        max-wait: 300
        #最大空闲数
        max-idle: 16
        #最小空闲数
        min-idle: 8

4)编写配置类
· 首先在启动类上面添加@EnableSpringCaching注解
·
//key序列化方式
template.setKeySerializer(redisSerializer);
//value序列化
template.setValueSerializer(jackson2JsonRedisSerializer);
//value hashmap序列化
template.setHashValueSerializer(jackson2JsonRedisSerializer);

@Configuration
public class RedisConfig {
    @Bean
    RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

    @Bean
    public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory) {
        //猜测:仍然是配键值对
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
        redisCacheConfiguration.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));

        Map<String, RedisCacheConfiguration> redisExpireConfig = new HashMap<>();
        //设置超时配置 - 一分钟
        redisExpireConfig.put("1min", RedisCacheConfiguration.defaultCacheConfig()
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                .entryTtl(Duration.ofMinutes(1)).disableCachingNullValues());

        RedisCacheManager redisCacheManager = RedisCacheManager.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
                .cacheDefaults(redisCacheConfiguration)
                .withInitialCacheConfigurations(redisExpireConfig)
                .transactionAware()
                .build();

        return redisCacheManager;
    }

}

代码见demo,可以设置甚于生存时间,当时间到达后就会清除掉这个缓存。

5)在接口上用@Cacheable开启缓存

@RestController
@RequestMapping(value = "/user")
public class UserController {

    //Cacheable是开启缓存,接口返回的数据将会被缓存,value是缓存的名称,key是缓存的键值;除此之外,可以用@Cacheable(value = {"1min"}, key = "uid")指定多个名称
    @GetMapping(value = "/info")
    @Cacheable(value = "user", key = "#uid")
    public User getUser(@RequestParam(value = "uid") String uid) {
        System.out.println("getUser====>" + uid);
        User user = new User();
        user.setUid(uid);
        user.setEmail(uid + "@definesys.com");
        user.setName(uid + ":" + System.currentTimeMillis());
        return user;
    }
}

可以在请求该接口,会返回对应常见的对象:

➜  redisDemo git:(tmp) ✗ curl  http://localhost:8080/user/info\?uid\=malco    
{"name":"malco:1637505726083","uid":"malco","email":"malco@definesys.com"}% 

进入容器内部看看:

>docker exec -it redis redis-cli

>127.0.0.1:6379> ttl user::malco
(integer) -1

返回-1说明user::malco这个key-value对象永远不超时,可以设置ttl让它生存时间只有1分钟,时间到了之后就会清除这个缓存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值