美文网首页
Redis简单使用

Redis简单使用

作者: 愿你我皆是黑马 | 来源:发表于2021-06-30 23:14 被阅读0次

    什么是Redis

    开源、遵守 BSD 协议、支持网络、基于内存、分布式、可选持久性的key-value数据库。


    支持数据结构

    • String: 字符串(最大能存储 512MB)
    • Hash: 散列
    • List: 列表
    • Set: 集合
    • Sorted Set: 有序集合

    命令操作

    • 客户端命令操作(不区分大小写)
      1. 连接服务端: redis-cli -h 127.0.0.1 -p 6379 -a "密码"
      2. 在命令行中显示的中文不显示16进制而是显示中文: redis-cli -h 127.0.0.1 -p 6379 -a "密码" --raw
      3. 设置键值对: SET key value 成功返回OK
      4. 查看存储的值:get key 获取缓存key对应的value
      5. 删除存储的值:DEL key 删除成返回1,失败返回0
      6. 查看所有配置key:CONFIG GET *
      7. 修改配置:修改 redis.conf 文件或使用 CONFIG set 命令
      8. 查看当前存储的所有key:keys *
      9. 统计当前存储的所有key:info Keyspace
    • 服务端命令操作(不区分大小写)
      1. 启动Redis服务端:redis-server

    配合cache一起接入Springboot中

    • 配置

      1. 开启基于注解的缓存:@EnableCaching

      2. 缓存数据时value序列化策略:serialize

      3. 缓存数据时key生成策略:keyGenerator

      4. 统一配置本类的缓存注解的属性:@CacheConfig

      5. 缓存管理器,管理各种缓存(cache)组件:CacheManager

    • 配置示例:

      @Configuration
      public class RedisConfig {
      
          /**
           * 重写Redis序列化定义方式,采取json方式————避免json格式乱码
           *
           * @param factory
           * @return
           */
          @Bean
          public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
              RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
              //将刚才的redis连接工厂设置到模板类中
              redisTemplate.setConnectionFactory(factory);
              // 创建json序列化对象
              GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
              // 设置key序列化String
              redisTemplate.setKeySerializer(new StringRedisSerializer());
              // 设置value序列化 json
              redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
              // 设置hash key序列化String
              redisTemplate.setHashKeySerializer(new StringRedisSerializer());
              // 设置hash value 序列化json
              redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
              // 初始化redis完成序列化的方法
              redisTemplate.afterPropertiesSet();
              return redisTemplate;
          }
      
          /**
           * 缓存配置
           * @param factory
           * @return
           */
          @Bean
          public CacheManager cacheManager(RedisConnectionFactory factory) {
              RedisCacheConfiguration cacheConfiguration =
                      RedisCacheConfiguration.defaultCacheConfig()
                              //设置缓存默认超时时间  30分钟
                              //.entryTtl(Duration.ofMillis(30))
                              .disableCachingNullValues()
                              // 设置key序列化
                              .serializeKeysWith(
                                      RedisSerializationContext
                                              .SerializationPair
                                              .fromSerializer(new StringRedisSerializer()))
                              .serializeValuesWith(RedisSerializationContext
                                      .SerializationPair
                                      .fromSerializer(new GenericJackson2JsonRedisSerializer()));
              return RedisCacheManager
                      .builder(factory)
                      .cacheDefaults(cacheConfiguration)
                      .build();
          }
      
          @Bean
          public RedisConnectionFactory redisCF() {
              //如果什么参数都不设置,默认连接本地6379端口
              JedisConnectionFactory factory = new JedisConnectionFactory();
              factory.setPort(6379);
              factory.setHostName("127.0.0.1");
              return factory;
          }
      }
      
      @SpringBootApplication
      @EnableCaching  // 开启缓存
      public class CloudEverydayawordApplication {
          public static void main(String[] args) {
              SpringApplication.run(CloudEverydayawordApplication.class, args);
          }
      }
      

    使用Redis

    • 设置缓存 @Cacheable:有缓存就读缓存,没有才执行将返回值设置到缓存中
    • 更新缓存 @CachePut:保证方法被调用,并且结果被缓存
    • 删除缓存 @CacheEvict:删除匹配上的缓存

    简单示例:

    @RestController
    @EnableAutoConfiguration
    public class TestController {
    
        Logger log = LoggerFactory.getLogger(TestController.class);
    
        @Cacheable(value = "userCache", key = "111")
        @PostMapping("/saveTest")
        public String saveTest() {
            log.error("----查询数据库----");
            return "查询数据库";
        }
    
        @PostMapping("/updateTest")
        @CachePut(value = "userCache", key = "111")
        public String updateTest() {
            log.error("----更新缓存----");
            return "删除缓存->1";
        }
    
        @PostMapping("/deleteTest")
        @CacheEvict(value = "userCache", key = "111")
        public String deleteTest() {
            log.error("----删除缓存----");
            return "删除缓存";
        }
    }
    

    相关文章

      网友评论

          本文标题:Redis简单使用

          本文链接:https://www.haomeiwen.com/subject/ndmdultx.html