当前位置: 首页 > 知识库问答 >
问题:

如何消除通过redis get命令获取垃圾值?

刘乐童
2023-03-14
    null
  • Redis版本2.8
  • Jedis client 2.5.1连接Redis

请提出一些解决方案来解决这个问题。

共有1个答案

居晗日
2023-03-14

本页概述了问题。来自文章:

在Spring RedisTemplate类RedisTemplate.SetenableTransactionSupport(true);中启用Redis事务时,我得到了一个深刻的教训:Redis在运行几天后开始返回垃圾数据,导致严重的数据损坏。StackOverflow上报告了一个类似的案例。

通过运行monitor命令,我的团队发现在Redis操作或RedisCallback之后,Spring不会像它应该做的那样自动关闭Redis连接。重用未关闭的连接可能会从Redis中的意外键返回垃圾数据。有趣的是,当事务支持在redistemplate中设置为false时,此问题不会出现。

我们发现,通过在Spring上下文中配置PlatformTransactionManager(例如DataSourceTransactionManager),然后使用@Transactional注释声明Redis事务的范围,可以使Spring自动关闭Redis连接。

根据这一经验,我们认为在Spring上下文中配置两个独立的redistemplate是一个好的做法:一个事务设置为false的Redis操作用于大多数Redis操作;另一个启用事务的只适用于Redis事务。当然,必须声明PlatformTransactionManager和@Transactional以防止返回垃圾值。

此外,我们了解了将Redis事务与关系数据库事务(在本例中是JDBC)混合的缺点。混合事务的行为并不像您所期望的那样。

 类似资料:
  • Go 语言中除了可以通过 os 包获取命令行参数以外,还可以通过 flag 包获取命令行参数 package main import ( "flag" "fmt" ) func main() { /* flag.Xxxx(name, value, usage) 第一个参数: 命令行参数名称 第二个参数: 命令行参数对应的默认值 第三个参数: 命令行参数对应的

  • C 语言中的命令行参数 argc:argv 中保存数据的个数 argv:默认情况下系统只会传入一个值,这个值就是 main 函数执行文件的路径 我们可以通过配置开发工具,或者命令行运行时以空格+参数形式传递其它参数 注意点: 无论外界传入的是什么类型, 我们拿到的都是字符串类型 #include <stdio.h> int main(int argc, const char * argv[])

  • 问题内容: 如何通过JavaScript 捕获Mac的密钥? 问题答案: 编辑: 截至2019年,是支持所有主流浏览器按照该MDN。 请注意,在Windows上,尽管该密钥被认为是“元”密钥,但浏览器本身不会捕获该密钥。 这仅适用于MacOS /键盘上的命令键。 与/ / 不同,(“ Apple”)键不被认为是修饰键-相反,您应该在/上聆听/ 并记录何时按下某个键,然后基于进行按下。 不幸的是,这

  • 问题内容: 我使用塔和sqlalchemy。我不断更新架构文件,并删除并重新创建数据库,以便可以制作新的架构。 每次我通过打开MySql查询浏览器并登录并删除数据库/架构来执行此操作。 如何在Ubuntu Linux中删除完整的linux shell命令中的MySQL db / schema? 问题答案: 尝试以下命令:

  • 问题内容: 有人可以解释一下G1垃圾收集器的工作原理吗?我还无法在任何地方找到任何全面,易于理解的描述。 谢谢 问题答案: 收集器将堆分成固定大小的区域,并跟踪这些区域中的实时数据。它将一组指针(“记住的集”)保留在区域内和区域外。当认为有必要使用GC时,它将首先收集实时数据较少的区域(因此,“垃圾优先”)。通常,这意味着一步就可以收集整个区域:如果进入一个区域的指针数量为零,则无需对该区域进行标

  • 问题内容: 我想向JVM注册一个回调,所以我知道何时进行垃圾回收。有什么办法吗? 编辑:我想这样做,以便可以在应用程序日志中发生垃圾收集时注销,这样我就可以查看它是否与我所看到的问题相关。启用- Xloggc很有帮助,但是将GC日志中的时间(自应用程序启动以来使用秒数)整合到我的主应用程序日志中有点棘手。 编辑2012年4月:从Java7u4开始,您可以从GarbageCollectorMXBea