什么是Redis
開源、遵守 BSD 協(xié)議况芒、支持網(wǎng)絡(luò)、基于內(nèi)存叶撒、分布式绝骚、可選持久性的key-value數(shù)據(jù)庫(kù)。
支持?jǐn)?shù)據(jù)結(jié)構(gòu)
- String: 字符串(最大能存儲(chǔ) 512MB)
- Hash: 散列
- List: 列表
- Set: 集合
- Sorted Set: 有序集合
命令操作
- 客戶端命令操作(不區(qū)分大小寫)
- 連接服務(wù)端: redis-cli -h 127.0.0.1 -p 6379 -a "密碼"
- 在命令行中顯示的中文不顯示16進(jìn)制而是顯示中文: redis-cli -h 127.0.0.1 -p 6379 -a "密碼" --raw
- 設(shè)置鍵值對(duì): SET key value 成功返回OK
- 查看存儲(chǔ)的值:get key 獲取緩存key對(duì)應(yīng)的value
- 刪除存儲(chǔ)的值:DEL key 刪除成返回1痊乾,失敗返回0
- 查看所有配置key:CONFIG GET *
- 修改配置:修改 redis.conf 文件或使用 CONFIG set 命令
- 查看當(dāng)前存儲(chǔ)的所有key:keys *
- 統(tǒng)計(jì)當(dāng)前存儲(chǔ)的所有key:info Keyspace
- 服務(wù)端命令操作(不區(qū)分大小寫)
- 啟動(dòng)Redis服務(wù)端:redis-server
配合cache一起接入Springboot中
-
配置
開啟基于注解的緩存:@EnableCaching
緩存數(shù)據(jù)時(shí)value序列化策略:serialize
緩存數(shù)據(jù)時(shí)key生成策略:keyGenerator
統(tǒng)一配置本類的緩存注解的屬性:@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連接工廠設(shè)置到模板類中 redisTemplate.setConnectionFactory(factory); // 創(chuàng)建json序列化對(duì)象 GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); // 設(shè)置key序列化String redisTemplate.setKeySerializer(new StringRedisSerializer()); // 設(shè)置value序列化 json redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer); // 設(shè)置hash key序列化String redisTemplate.setHashKeySerializer(new StringRedisSerializer()); // 設(shè)置hash value 序列化json redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer); // 初始化redis完成序列化的方法 redisTemplate.afterPropertiesSet(); return redisTemplate; } /** * 緩存配置 * @param factory * @return */ @Bean public CacheManager cacheManager(RedisConnectionFactory factory) { RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() //設(shè)置緩存默認(rèn)超時(shí)時(shí)間 30分鐘 //.entryTtl(Duration.ofMillis(30)) .disableCachingNullValues() // 設(shè)置key序列化 .serializeKeysWith( RedisSerializationContext .SerializationPair .fromSerializer(new StringRedisSerializer())) .serializeValuesWith(RedisSerializationContext .SerializationPair .fromSerializer(new GenericJackson2JsonRedisSerializer())); return RedisCacheManager .builder(factory) .cacheDefaults(cacheConfiguration) .build(); } @Bean public RedisConnectionFactory redisCF() { //如果什么參數(shù)都不設(shè)置哪审,默認(rèn)連接本地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
- 設(shè)置緩存 @Cacheable:有緩存就讀緩存,沒有才執(zhí)行將返回值設(shè)置到緩存中
- 更新緩存 @CachePut:保證方法被調(diào)用蛾魄,并且結(jié)果被緩存
- 刪除緩存 @CacheEvict:刪除匹配上的緩存
簡(jiǎn)單示例:
@RestController
@EnableAutoConfiguration
public class TestController {
Logger log = LoggerFactory.getLogger(TestController.class);
@Cacheable(value = "userCache", key = "111")
@PostMapping("/saveTest")
public String saveTest() {
log.error("----查詢數(shù)據(jù)庫(kù)----");
return "查詢數(shù)據(jù)庫(kù)";
}
@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 "刪除緩存";
}
}