redis 原理的提问 返回

SqlSugar 沟通中
15 184
该叫什么 斌斌 发布于2周前
悬赏:0 飞吻

文档写的key最好不要过1000个,虽然有多的解决方法,但是我想了解下这应该是慢在哪,

目前云redis,监控显示cpu 使用0.4%,key 1600多个,无大key 监控,redis 不应该是存取都是直接用key 直接去读的么,过期删除不也应该是redis 自己内部监控删除的么,我感觉存取都应该是直接写key名精准查询,为什么会慢的呢,接口时不时就超时,nosql 按理说十万个key 直接写入读取也不可能卡的呢。不太明白二级缓存内部的原理

image.png

热忱回答15

  • 他为什么要主动去获取全部然后删除呢?redis 不是设置了过期时间,redis自己就会删除的么?

     StaticConfig.CacheRemoveByLikeStringFunc = (service, key) =>
     {
        //根据key模糊删除缓存  
     };


    0 回复
  • KEY多就重写就行了。

    0 回复
  • 以前用缓存都是很精准使用的,会精准控制KEY,后面的开发者都无脑用了,开始设计没考虑后面开发者需求。

    但是这个功用的人多了,所以只能加个重写来满足新需求。

    0 回复
  • @fate sta:这个重写不知道大概怎么写,我不写行么,他本身不也能自动过期的么。

    0 回复
  • @fate sta:现在用户多了,时不时就出错,系统卡的转圈。现在都取消了缓存了。不敢用了呢。

    0 回复
  • @fate sta: 现在情况是用户多,查询订单列表的多,mysql 的count慢,我缓存这个count,

    没想到因为key多的问题,导致用了缓存更卡,程序经常报错。

    所以我是怀疑这个二级缓存内部是先调用redis的全部数据么?然后本地存一份?

    不是每次去redis 获取,如果存在就返回,从本地判断是否存在缓存,是否过期,不存在再读取mysql 的么?

    不是每次redis读的么 

    0 回复
  • @fate sta:还在么,应该怎么重写的。是重写的地方慢么。

    0 回复
  •  StaticConfig.CacheRemoveByLikeStringFunc = (service, key) =>
     {
        //根据key模糊删除缓存  
     };


    重写这个方法

    0 回复
  • 重写一个根据KEY模糊删除的方法

    0 回复
  • @fate sta:我不明白他原理,我不删除可以么?我redis 本身就自带过期删除的

    0 回复
  • 可以,但是你要保证KEY只能存在1000以下。

    0 回复
  • 建议是重定我的方法。

    0 回复
  • @fate sta:还是不明白原理,sugar 是内部还有个redis的副本么,不是直接需要缓存的,每次去redis去读的么?其他地方用redis,十万个key 也不会卡呢?不知道区别为什么。他不能精准删除key,一定要模糊的么

    0 回复
  • @斌斌:每次删除调用的是GetAllKey()里面找到相应的Key在删除。 所以这个方法提供重写,不走GetAllKey

    0 回复
  • 耗时在GetAllKey,每次删除前都Get所有Key然后循环Key去验证是不是删除的redis KEY。通过重写CacheRemoveByLikeStringFunc 删除Key可以避免这种情况。

    0 回复