本文介绍: bigkey也就意味着每次获取要产生的网络流量较大,假[[设一个bigkey为1MB,客户端每秒访问量为1000,那么每秒产生1000MB的流量,对于普通的千兆网卡(按照字节算是128MB/s)的服务器来说简直是灭顶之灾,而且一般服务器会采用单机多实例的方式来部署,也就是说一个bigkey可能会对其他实例也造成影响,其后果不堪设想。1、对于并发几率很小的数据(如个人维度的订单数据、用户数据等),这种几乎不用考虑这个问题,很少会发生缓存不一致,可以给缓存数据加上过期时间,每隔一段时间触发读的主动更新即可。
Redis缓存设计
缓存与数据库双写不一致
1、双写不一致情况,线程1写数据库,[线程2写数据库,并更新缓存],线程1更新缓存,此时旧缓存覆盖了新的
2、读写并发不一致,线程1读数据库,[线程2写数据库,并删除缓存],线程1更新缓存,此时的缓存不是最新的
解决方案:
1、对于并发几率很小的数据(如个人维度的订单数据、用户数据等),这种几乎不用考虑这个问题,很少会发生缓存不一致,可以给缓存数据加上过期时间,每隔一段时间触发读的主动更新即可。
2、就算并发很高,如果业务上能容忍短时间的缓存数据不一致(如商品名称,商品分类菜单等),缓存加上过期时间依然可以解决大部分业务对于缓存的要求。
3、如果不能容忍缓存数据不一致,可以通过加分布式读写锁保证并发读写或写写的时候按顺序排好队,读读的时候相当于无锁。
总结:
开发规范与性能优化
一、键值设计
1、key名设计
2、value设计
bigkey的危害:
bigkey的产生:
如何优化bigkey
二、命令使用
三、客户端使用
优化建议:
四、系统内核参数优化
vm.swapiness
vm.overcommit_memory(默认0)
合理设置文件句柄数
慢查询日志:slowlog
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。