流水线(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优化方案的更多相关文章

  1. 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结

    本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言   MySQL作为开源技术的代表作之一,是 ...

  2. SQL通用优化方案(where优化、索引优化、分页优化、事务优化、临时表优化)

    SQL通用优化方案:1. 使用参数化查询:防止SQL注入,预编译SQL命令提高效率2. 去掉不必要的查询和搜索字段:其实在项目的实际应用中,很多查询条件是可有可无的,能从源头上避免的多余功能尽量砍掉, ...

  3. Redis优化建议

    优化的一些建议 1.尽量使用短的key 当然在精简的同时,不要完了key的"见名知意".对于value有些也可精简,比如性别使用0.1. 2.避免使用keys * keys *, ...

  4. Tomcat 配置详解/优化方案

     转自:http://blog.csdn.net/cicada688/article/details/14451541 Service.xml Server.xml配置文件用于对整个容器进行相关的配置 ...

  5. 一个网站完整详细的SEO优化方案

    根据自己的个人经验完成了这篇文章,希望对SEOer有点帮助,高手直接跳过,请勿喷水... 一个完整的SEO优化方案主要由四个小组组成: 一.前端/页编人员 二.内容编辑人员 三.推广人员 四.数据分析 ...

  6. mysql 性能优化方案

    网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

  7. iOS界面跳转的一些优化方案

    原文地址: http://blog.startry.com/2016/02/14/Think-Of-UIViewController-Switch/ iOS界面跳转的一些优化方案 App应用程序开发, ...

  8. tomcat配置详解/优化方案

    Service.xml Server.xml配置文件用于对整个容器进行相关的配置. <Server>元素:是整个配置文件的根元素.表示整个Catalina容器. 属性:className: ...

  9. mysql 性能优化方案1

    网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

随机推荐

  1. Digging(DP)

    ZOJ Problem Set - 3689 Digging Time Limit: 2 Seconds      Memory Limit: 65536 KB When it comes to th ...

  2. c++ virtual总结

    virtual-关键字用于修饰成员函数时,有以下特性 1.用于修饰的基类的成员函数,被修饰的基类成员函数-其派生类的同名成员函数也默认带有virtual 关键字2.当virtual 用于修饰析构函数( ...

  3. [POJ 2559]Largest Rectangle in a Histogram 题解(单调栈)

    [POJ 2559]Largest Rectangle in a Histogram Description A histogram is a polygon composed of a sequen ...

  4. 【洛谷 P2512】 [HAOI2008]糖果传递(贪心)

    题目链接 环形均分纸牌. 设平均数为\(ave\),\(g[i]=a[i]-ave\),\(s[i]=\sum_{j=1}^ig[i]\). 设\(s\)的中位数为\(s[k]\),则答案为\(\su ...

  5. 笔记本自开wifi设置

    笔记本自开wifi设置 是这样的有些笔记本他自身就可以放出热点供其他的小伙伴们连接,不用非得去下专门的工具有些笔记本的网卡是自带支持双收发的(这里注意我指的是有些笔记本不是全部) 命令我已经写出来了  ...

  6. Balanced and stabilized quicksort method

    The improved Quicksort method of the present invention utilizes two pointers initialized at opposite ...

  7. 修改 firefox accesskey 的快捷键

    Chrome中,如果设置了 accesskey 的话,可以通过 Alt + 快捷键 来之直接跳转的.但在Firefox 中,可能是为了防止于菜单的快捷键冲突,所以设置了 Shift + Alt + 快 ...

  8. 更换git用户名或密码

    Windows10下更换Git用户名或密码:https://jingyan.baidu.com/article/642c9d3435a6e9644a46f732.html git清除用户名密码 git ...

  9. [ python ] 字符串的操作及作业题

    字符串的操作方法 capitalize() : 首字母大写 s1 = 'my heart will go on' print(s1.capitalize()) # 首字母大写 # 执行结果: # My ...

  10. Linux中常用命令 <一>

    本笔记中记录的命令来源于 <Linux C 编程实战> ------------------------------------------------------------------ ...