redis优化方案
流水线(pipelined)
批量提交redis命令,减少通信次数
事务
- mulit,事务的开始
- exec,执行事务快内的命令
- discard,放弃事务快内的命令
- watch,监视key,如果key改动则中断事务,CAS乐观锁
- unwatch,取消监视key
分布式锁机制
- 随着负载增加,失败重试次数也增加
- 为代表锁的key生成值,来获取锁
- setnx命令,当key不存在时为key设置value(set not exist)
- 设置expire过期时间,防止挂掉的进程一直持有锁,形成死锁
- 删除锁时需要先获取,再判断,最后删除,存在类似i++的原子性问题,可以使用lua脚本把一组命令当成一个原子语句来执行
分布式锁高并发优化
对同一个商品id的key进行锁请求,会进行串行化处理。类似于ConcurrentHashMap的锁分段原理,把库存分段,比如0-100,100-200,对应的key为id_100,id_200,把对一个key的锁请求变成分段的锁请求。
publish和subscribe替代方案,解决连接断开失败的问题
生产者把消息发送到消费者的消息列表里
发布消息,更新到follower的timeline中
类似twitter的网红账号,有几千万粉丝,比如前1000的粉丝直接添加。超过数量的通过消息队列延迟处理
ziplist压缩列表
当整数集合在设置的限制条件内时,底层会使用ziplist压缩列表
主要包括list-max-ziplist-entires(最大元素数量)和list-max-ziplist-value(每个节点最大体积)
分片和哨兵机制
一般使用hash一致性算法获取取模,根据key值计算出属于哪一个节点上
一般是奇数台哨兵,哨兵会向主机发送心跳检测。如果长时间没回应,认为主机死亡,选举出新的master
配置只读服务器(拓展读性能)
slaveof host post
在多个服务器尝试与主服务器进行连接时,在主节点创建快照完成之前,子节点都会受到同一份快照。但是过多的快照副本可能会耗尽主节点资源,可以采树状的结构,将一级子节点作为二级子节点的主节点。
预先分片(拓展写性能)
在单机上运行多个实例,监听不同端口
应用和redis隔离部署
应用可能瞬间抢占了全部的CPU资源,导致redis没有资源超时,而应用如果刚好需要连接redis,会产生类似的死锁
redis和db的数据一致性
- 一般情况下,更新数据时先删除缓存再更新db,等读时再将db查询结果更新到缓存
- 高并发下,可能在更新db前就有新的读请求,这时缓存失效于是去db查旧数据又更新到缓存。解决方案是使用任务队列,把更新操作加入到队列中,当有读请求时,先看是否有更新请求
- 延时双删 ,在更新完db后,休眠比读请求耗时多几百ms的时间,再次删除缓存,消除高并发下读请求造成的脏数据
- 对key加分布式锁
db更新缓存失败
- 通过循环操作固定次数,减少网络瞬时抖动造成的影响
- 还是失败的话,添加任务到mq中,通知更新失败,让消费mq队列去更新缓存
热点数据防止缓存穿透和雪崩(利用分布式锁)
查询到缓存中key不存在,使用分布式锁,防止多个线程读同一个key请求多次db。在查询db前再判断一次缓存中key是否存在,如果别的线程已经将db更新到缓存中,则不允许再读db。
限制锁的数量,比如固定1000个,根据id的hashcode对1000取模,使得同时最多只有1000个并发,其他线程没有锁阻塞,延迟竞争锁。
redis优化方案的更多相关文章
- 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结
本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言 MySQL作为开源技术的代表作之一,是 ...
- SQL通用优化方案(where优化、索引优化、分页优化、事务优化、临时表优化)
SQL通用优化方案:1. 使用参数化查询:防止SQL注入,预编译SQL命令提高效率2. 去掉不必要的查询和搜索字段:其实在项目的实际应用中,很多查询条件是可有可无的,能从源头上避免的多余功能尽量砍掉, ...
- Redis优化建议
优化的一些建议 1.尽量使用短的key 当然在精简的同时,不要完了key的"见名知意".对于value有些也可精简,比如性别使用0.1. 2.避免使用keys * keys *, ...
- Tomcat 配置详解/优化方案
转自:http://blog.csdn.net/cicada688/article/details/14451541 Service.xml Server.xml配置文件用于对整个容器进行相关的配置 ...
- 一个网站完整详细的SEO优化方案
根据自己的个人经验完成了这篇文章,希望对SEOer有点帮助,高手直接跳过,请勿喷水... 一个完整的SEO优化方案主要由四个小组组成: 一.前端/页编人员 二.内容编辑人员 三.推广人员 四.数据分析 ...
- mysql 性能优化方案
网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...
- iOS界面跳转的一些优化方案
原文地址: http://blog.startry.com/2016/02/14/Think-Of-UIViewController-Switch/ iOS界面跳转的一些优化方案 App应用程序开发, ...
- tomcat配置详解/优化方案
Service.xml Server.xml配置文件用于对整个容器进行相关的配置. <Server>元素:是整个配置文件的根元素.表示整个Catalina容器. 属性:className: ...
- mysql 性能优化方案1
网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...
随机推荐
- Digging(DP)
ZOJ Problem Set - 3689 Digging Time Limit: 2 Seconds Memory Limit: 65536 KB When it comes to th ...
- c++ virtual总结
virtual-关键字用于修饰成员函数时,有以下特性 1.用于修饰的基类的成员函数,被修饰的基类成员函数-其派生类的同名成员函数也默认带有virtual 关键字2.当virtual 用于修饰析构函数( ...
- [POJ 2559]Largest Rectangle in a Histogram 题解(单调栈)
[POJ 2559]Largest Rectangle in a Histogram Description A histogram is a polygon composed of a sequen ...
- 【洛谷 P2512】 [HAOI2008]糖果传递(贪心)
题目链接 环形均分纸牌. 设平均数为\(ave\),\(g[i]=a[i]-ave\),\(s[i]=\sum_{j=1}^ig[i]\). 设\(s\)的中位数为\(s[k]\),则答案为\(\su ...
- 笔记本自开wifi设置
笔记本自开wifi设置 是这样的有些笔记本他自身就可以放出热点供其他的小伙伴们连接,不用非得去下专门的工具有些笔记本的网卡是自带支持双收发的(这里注意我指的是有些笔记本不是全部) 命令我已经写出来了 ...
- Balanced and stabilized quicksort method
The improved Quicksort method of the present invention utilizes two pointers initialized at opposite ...
- 修改 firefox accesskey 的快捷键
Chrome中,如果设置了 accesskey 的话,可以通过 Alt + 快捷键 来之直接跳转的.但在Firefox 中,可能是为了防止于菜单的快捷键冲突,所以设置了 Shift + Alt + 快 ...
- 更换git用户名或密码
Windows10下更换Git用户名或密码:https://jingyan.baidu.com/article/642c9d3435a6e9644a46f732.html git清除用户名密码 git ...
- [ python ] 字符串的操作及作业题
字符串的操作方法 capitalize() : 首字母大写 s1 = 'my heart will go on' print(s1.capitalize()) # 首字母大写 # 执行结果: # My ...
- Linux中常用命令 <一>
本笔记中记录的命令来源于 <Linux C 编程实战> ------------------------------------------------------------------ ...