使用redi设置唯一标识
场景
商城项目中的商品是安装类别区分的,在页面中也是按照分类展示的,为了是接口的反应速度更快,后端决定对产品进行缓存,考虑到redis的数据结构,决定采用有序列表和哈希,存储分组的有序列表以及分组的的哈希,以及每一个分组下产品的有序列表以及产品的哈希,举个例子
假如有十个分组,将这是个分组按照一定的顺序存进有序列表
并将每一个分组的具体字段存成hash
每一个分组下面有一百个商品, 根据分组id创建一个key 然后将分组内地产品id存成一个有序列表
并将产品的具体字段存成hash
使用
使用时,根据分组的有序列表获取分组的id, 再根据id 获取具体的分组内容
根据分组id获取商品的有序列表, 根据商品的id获取商品的具体内容
如果缓存不存在则去查数据表写进缓存,再次查缓存
本来以为一切都很完美,但是还是出了问题
bug
当分组中有产品时,有缓存查缓存,没有缓存查数据表,写入缓存,再次查缓存
但是,当没有产品时,没有缓存,查数据表,没有数据可以写入缓存,返回空
第二次查的时候还是 没有缓存,查数据表,没有数据可以写入缓存,返回空
所以就出现了一个问题,当某一分组下面没有产品时,每次都会重复操作缓存 数据表 缓存,如果产品的数据量比较大的时候,就会出现反应慢的情况
解决
既然找到了问题,解决就好了
在第一次查询数据时,不管数据是否查询到,都给这次查询或者说这个key存一个唯一标识,说明对于这个key我已经查询过数据表了,不用再查了就可以了,通俗的说就是不以查询缓存的结果是否为空来作为查询数据表的依据,而是以key的唯一标识是否存在
redis 里面有一个setnx方法可以使用,当然也可以自己存一个value
结束
有些东西(功能)第一次看的时候可能不明白,所以没有使用,当你真的遇到的时候就会发现,这代码bug真多,还好老板不懂技术
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器