什么是Redis
开源、遵守 BSD 协议、支持网络、基于内存、分布式、可选持久性的key-value数据库。
支持数据结构
- String: 字符串(最大能存储 512MB)
- Hash: 散列
- List: 列表
- Set: 集合
- Sorted Set: 有序集合
命令操作
- 客户端命令操作(不区分大小写)
- 连接服务端: redis-cli -h 127.0.0.1 -p 6379 -a "密码"
- 在命令行中显示的中文不显示16进制而是显示中文: redis-cli -h 127.0.0.1 -p 6379 -a "密码" --raw
- 设置键值对: SET key value 成功返回OK
- 查看存储的值:get key 获取缓存key对应的value
- 删除存储的值:DEL key 删除成返回1,失败返回0
- 查看所有配置key:CONFIG GET *
- 修改配置:修改 redis.conf 文件或使用 CONFIG set 命令
- 查看当前存储的所有key:keys *
- 统计当前存储的所有key:info Keyspace
- 服务端命令操作(不区分大小写)
- 启动Redis服务端:redis-server
配合cache一起接入Springboot中
-
配置
开启基于注解的缓存:@EnableCaching
缓存数据时value序列化策略:serialize
缓存数据时key生成策略:keyGenerator
统一配置本类的缓存注解的属性:@CacheConfig
缓存管理器,管理各种缓存(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 "删除缓存";
}
}