因为项目业务需要,我们要把数据库中的大量数据缓存到redis中,并且会随时更新缓存,刚开始更新频率是1Hz,没有什么问题,后来更新频率达到了5Hz,lettuce开始疯狂报错:redis command timeout。既然出了问题,就得解决呀,好好分析一下发现,更新缓存的任务跟其他任务搅在一起了,而且最重要的是,缓存更新任务的执行是单线程的。既然找到了问题的可能原因,那就动手改造吧,把缓存更新改成多线程的,但咱们知道,redis是单线程的,而且redis的操作是原子性的,原生操作并不支持事务(更新缓存要先查询,再更新,这样的话就会可能导致“脏读”),不过lettuce作为一个优秀的java redis客户端,已经帮咱们考虑到这些问题了,在更新方法上加@Transactional注解就完事儿了。

好,多线程改造完毕,再次运行试试,结果还是出现了上面的问题,只是问题出现的晚了一点,而且伴随着还有线程池抛出的异常,而且redis的执行时间高达600+ms,这不是要了亲命嘛!!!接着排查问题,查看redis的查询慢的日志,发现慢的记录都是get方法,目标数据都是字符串形式的list,这个时候恍然大悟,我把list存成字符串,每次存取的时候要各种序列化,反序列化,当数据量大的时候肯定特别慢啊。对了,redis不是支持String,list,hash,set ,zset等数据格式呢。为什么我不把list数据存为redis的list格式呢??谋定后动,赶紧改造,完成发现,哈哈,果然现在操作时间只有20ms左右了,用户体验一下子就好起来了呢,nice~

总结:此次问题的出现是经验不足,对redis了解不够导致的,平时习惯了使用string格式存取数据到redis中,而把另外四种数据格式完完全全地忘掉_!!!

慢连接 java_记一次redis的java客户端lettuce操作慢的解决方案相关推荐

  1. Redis 高级 Java 客户端 Lettuce 的用法及踩坑经验

    如果你在网上搜索 Redis 的 Java 客户端,你会发现,大多数文献介绍的都是 Jedis,不可否认,Jedis 是一个优秀的基于 Java 语言的 Redis 客户端,但是,其不足也很明显:Je ...

  2. Redis的Java客户端Lettuce简介

    环境 操作系统:Ubuntu 20.04 Redis:6.2.6 开发工具:IntelliJ IDEA 2022.1 (Community Edition) Lettuce的官网( https://l ...

  3. Redis介绍 Java客户端操作Redis

    Redis介绍 && Java客户端操作Redis 本文内容 redis介绍 redis的 shell 客户端简介 redis的 java 客户端简介 环境配置 redis 2.8.1 ...

  4. Redis介绍 Java客户端操作Redis

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow Redis介绍 & ...

  5. Redis的Java客户端之Jedis(Jedis)

    文章目录 Redis的Java客户端(Jedis) 一.简介 二.Jedis快速入门 1.引入依赖 2.建立连接 3.使用Jedis 4.释放资源 三.Jedis连接池 1.创建Jedis连接池配置 ...

  6. Redis的Java客户端-Java客户端以及SpringDataRedis的介绍与使用

    1. Redis的Java客户端 Spring Data Redis底层支持同时兼容Jedis和Lettuce两种不同的Redis客户端,可以根据需要任意选择使用其中的一种.这样既可以保留现有代码使用 ...

  7. Redis(四) - Redis的Java客户端

    文章目录 一.Redis的Java客户端 二.Jedis客户端 1. 快速入门 (1)引入依赖 (2)创建jedis对象,建立连接 (3)测试,方法名与Redis命令一致 (4)释放资源 2. Jed ...

  8. Redis的Java客户端

    目录 1 前言 2 Jedis客户端 2.1 jedis快速入门 2.2Jedis连接池 3 SpringDataRedis 3.1快速入门 3.2ReisTemplate配置序列化工具 3.3 St ...

  9. redis的Java客户端:Jedis的使用及JedisPool的配置优化

    Jedis的方法,方法命跟redis命令行客户端几乎一样,参数及参数顺序以跟redis命令行客户端几乎一样. 这里不一一介绍,直接Jedis. 会有提示. pom.xml <?xml versi ...

最新文章

  1. 识别图片并可视化_识别交通锥,特斯拉驾驶信任提升的一小步
  2. 过年回家抢票不求人,试试这个开源抢票神器吧!
  3. 在下列选项中,没有构成死循环的程序的是?
  4. Python yield 用法
  5. Android如何实现NoActionBar以及Theme.NoTitleBar.Fullscreen效果
  6. android状态机是线程么,Java中的线程状态机 - java
  7. android中常见的回调模式
  8. 专心写即时通讯软件争取CSDN认证专家
  9. python合并csv文件、并利用结果进行计算_python合并csv文件
  10. python字典没有长度限制_python-字典更新序列元素#0的长度为15; 2个为必填项
  11. 1112个人赛,最长回文串常见算法讨论
  12. python write函数换行_Python基础知识(三)
  13. 一个发人深省的经典理财故事
  14. c语言符号字符集包括,c语言基本符号
  15. 操作系统——经典同步问题
  16. 分位数回归及Stata实现
  17. yii2实现后端分页和模糊查询
  18. java 连接池配置_【Java】java数据库连接池配置的几种方法
  19. 修复 Android 系统问题的 9 款最佳 Android 手机维修软件和应用
  20. windows 工具命令 cmd

热门文章

  1. C#面向对象三大特性之二:继承
  2. 团队招人的笔试题,我的回答。
  3. ES6常用新特性---笔记一
  4. 使用QQ截图取色的方法
  5. redux和react-redux的使用详解
  6. selector + drawable 多状态图形
  7. jedis中scan的实现
  8. 免费阅读软件轻快阅读器怎么用
  9. Android中Activity的启动流程和组织管理方式(Backstack、Task)
  10. 基于MINA框架快速开发网络应用程序