当前位置:网站首页 > R语言数据分析 > 正文

redis为啥不使用长连接(redis不能连接)



今天在开发的过程中遇到了一个Redis的问题: 当你在redis中插入一个key值,并且设置了对应过期时间. 当过期时间还没到的时候更新key值会导致过期时间被刷新, 针对这个问题: 我查看了下redis的官方文档, 他们是这么解释的:

 

也就是,对redis中存在的key进行set或getset会将原来的key进行覆盖,并且是全部属性都覆盖。怀疑set方法时redis内部的操作就是先删除再存储。

这个涉及到redis的删除机制:Redis里面如果有大量的key,怎样才能高效的找出过期的key并将其删除呢,难道是遍历每一个key吗?假如同一时期过期的key非常多,Redis会不会因为一直处理过期事件,而导致读写指令的卡顿。

这里说明一下,Redis是单线程的,所以一些耗时的操作会导致Redis卡顿,比如当Redis数据量特别大的时候,使用keys * 命令列出所有的key。

因此Redis默认使用懒惰删除+定期删除相结合的方式处理过期的key。

  • 懒惰删除:请求过期key时,若该key已过期且未删除则会删除;
  • 定期删除:轮循进程,该进程轮循查找过期key进行删除

所以,不会立即删除,因为删除key时肯定是主服务来删除(因为redis是单线程的),所以当他在执行删除指令的时候,他就无法进行其他的操作,立即删除会影响性能;所以呢,他不会立即进行删除;

但是,如果一个key过期之后,无论redis删没删掉这个key外界都是查不到的;只是占用内存与否的问题。

mysql的读写效率没有想象的那么慢,mysql自己是有缓存的,mysql在不联表查取少量数据的情况下,基本与redis没什么差别。

为什么不建议使用mysql长连接,而却允许redis长连接:是因为redis使用的是IO复用模型,单线程可以同时处理多个连接,而mysql开源版一个线程对应一个连接。

  • 热点数据
  • 临时数据
  • 复杂计算结果

Redis:作为一个内存数据库,Redis 具有非常高的读写并发能力,能够处理数十万到数百万的请求每秒。

MySQL:作为一个传统的关系型数据库,MySQL 的并发处理能力相对较低,通常在数千到数万的请求每秒。

不过提升核数并不会提升redis的并发能力i,因为一个redis 只能占用一核cpu。redis的并发量远比mysql要大,因为它没有io操作。

redis的key极少极少需要设置永不过期,如果一个key要设置永不过期,需要斟酌再斟酌。

到此这篇redis为啥不使用长连接(redis不能连接)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • miracl密码库(mct密码库)2025-04-07 13:27:10
  • store to store翻译(store is not available翻译)2025-04-07 13:27:10
  • spring详细教程(spring教程 csdn)2025-04-07 13:27:10
  • Resnet101模型(resnet101参数)2025-04-07 13:27:10
  • win32dll是什么(win32/virus.adware.08e是什么病毒)2025-04-07 13:27:10
  • airplay2(airplay2如何使用)2025-04-07 13:27:10
  • ifstream读取文件不存在报错吗?(ifstream fin读取)2025-04-07 13:27:10
  • 文件的权限是-rwxr(文件的权限是-rwxr--r--,描述正确的是____?)2025-04-07 13:27:10
  • vier是什么品牌(viera是什么牌子)2025-04-07 13:27:10
  • arg怎么读?(matter怎么读)2025-04-07 13:27:10
  • 全屏图片