九、springboot整合redis二之缓冲配置
发布日期:2021-08-11 07:31:59 浏览次数:5 分类:技术文章

本文共 5267 字,大约阅读时间需要 17 分钟。

1.创建Cache配置类

@Configuration@EnableCachingpublic class RedisCacheConfig extends CachingConfigurerSupport {    @Value("${redis.cache.expiration}")    private Long expiration;        /**     *      * 管理缓存     */    @Bean    public CacheManager cacheManager(RedisTemplate
redisTemplate) { RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); cacheManager.setDefaultExpiration(expiration);// 设置缓存默认过期时间(全局的)秒 return cacheManager; } /** * 自定义生成的redis key * 在使用@Cacheable时,如果不指定key,则使用找个默认的key生成器生成的key * @return */ @Bean @Override public KeyGenerator keyGenerator() { 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 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; }}

2.使用

  1.手动方式:

    Jedis工具类

@Componentpublic class RedisUtil {    private Logger log = LoggerFactory.getLogger(getClass());    @Autowired    private StringRedisTemplate stringRedisTemplate;    @Autowired    private RedisTemplate
redisTemplate; /** * 根据redis key 获取 value * * @param key 键 * @return String */ public String get(String key) { return this.stringRedisTemplate.opsForValue().get(key); } /** * 根据redis key 设置 value * * @param key * @param value * @param overwrite */ public void set(String key, String value, boolean overwrite) { if(!overwrite) {
//setIfAbsent(key, value):如果key不存在则新增,并返回true;存在则不改变已经有的值,并返回false。 boolean isSet = this.stringRedisTemplate.opsForValue().setIfAbsent(key, value); if (!isSet) { log.warn("key值已存在且不进行覆写"); } }else { this.stringRedisTemplate.opsForValue().set(key, value); } } /** * 根据redis key 设置 value 同时设置失效时间 * * @param key */ public void set(String key, String value, long timeout) { boolean isSet = this.stringRedisTemplate.opsForValue().setIfAbsent(key, value); if (isSet) { this.stringRedisTemplate.expire(key, timeout, TimeUnit.SECONDS); } else { log.warn("key值已存在"); } } /** * 根据key检查是否已存在 * * @param key * @return boolean */ public boolean exists(String key) { boolean result = false; result = this.stringRedisTemplate.hasKey(key); return result; } /** * 根据key值删除value * * @param key */ public void del(String key) { this.stringRedisTemplate.delete(key); } /** * 获取hashKey对应的所有键值 * * @param key 键 * @return 对应的多个键值 */ public Map
hmget(String key) { return this.redisTemplate.opsForHash().entries(key); } /** * HashSet 并设置时间 * * @param key 键 * @param map 对应多个键值 * @param time 时间(秒) * @return true成功 false失败 */ public boolean hmset(String key, Map
map, long timeout) { try { this.redisTemplate.opsForHash().putAll(key, map); if (timeout > 0) { this.redisTemplate.expire(key, timeout, TimeUnit.SECONDS); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 根据key删除hash * * @param key */ public void delhm(String key) { this.redisTemplate.delete(key); } /** * redis分布式锁(同步锁) * setIfAbsent(key, value):如果key不存在则新增,并返回true;存在则不改变已经有的值,并返回false。 * 1.第一次key不存在,返回true,并新增key,设置过期时间; * 2.第二次进来,key存在,返回false说明已经锁了。 * @param key * @param seconds * @return boolean */ public boolean lock(String key, int seconds) { log.info("{}开始加锁", key); boolean result = this.stringRedisTemplate.opsForValue().setIfAbsent(key, "LOCKED"); log.info("{}锁定完成-{}", key, result); if(result) { boolean expired = this.stringRedisTemplate.expire(key, seconds, TimeUnit.SECONDS); log.info("{}设置过期时间{}-{}", key, seconds, expired); } return result; }}

  2.自动方式:

    添加@Cacheable注解实现缓存添加

    添加@CacheEvict注解实现缓存删除

   具体实现参考上一篇文章:

 

转载于:https://www.cnblogs.com/soul-wonder/p/9003842.html

转载地址:https://blog.csdn.net/weixin_30616969/article/details/98701561 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android中的Activity生命周期
下一篇:EventLog监控

发表评论

最新留言

不错!
[***.144.177.141]2024年02月28日 22时41分17秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

jquery后台内容管理_教育平台项目后台管理系统:课程内容模块 2019-04-21
grouping函数 mysql_sql聚合函数有哪些 2019-04-21
python os.walk如何不遍历隐藏文件_python 获取文件下所有文件或目录os.walk()的实例... 2019-04-21
python 股票估值_【中金固收·固收+】隐藏价值的角落:限售股AAP估值及Python实现方法(上)... 2019-04-21
java文档生成_Java文档自动生成 2019-04-21
java 共享目录_java 操作windows 共享目录方法介绍 2019-04-21
java 监控 宕机_JAVA监测tomcat是否宕机,控制重启 2019-04-21
catch that cow java_POJ3278——Catch That Cow 2019-04-21
java integer 不变模式_Java代码的变与不变 2019-04-21
java guava 使用_Java8-Guava实战示例 2019-04-21
python barrier option pricing_《Python金融数据分析》书内代码实战与讲解(二)金融衍生物定价... 2019-04-21
java自带工具_深入了解Java JDK自带工具,包括javac、jar、jstack等,实用~ 2019-04-21
gnome mysql client_解决MySQLWorkbenchgnome-keyring-daemon错误的方法分享 2019-04-21
java线程占用CPU_在windows下揪出java程序占用cpu很高的线程并完美解决 2019-04-21
java多态替换switch_使多态性无法解决那些switch / case语句的麻烦 2019-04-21
java httpclient 进度条_如何使用Apache HttpClient 4获取文件上传的进度条? 2019-04-21
下列不属于java语言特点的是_下列选项中,不属于Java语言特点的一项是( )。... 2019-04-21
java中小数的乘法_javascript的小数点乘法除法实例 2019-04-21
kappa一致性检验教程_SPSS在线_SPSSAU_Kappa一致性检验 2019-04-21
linux shell mysql备份_linux shell 备份mysql 数据库 2019-04-21