首发于 PHP 互联网架构师成长指南*

redis 优化

Redis 单线程为什么还能这么快?

因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性 能损耗问题。

Redis 单线程如何处理那么多的并发客户端连接?

Redis的IO多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到 文件事件分派器,事件分派器将事件分发给事件处理器。

Redis 单线程为什么还能这么快?

因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性 能损耗问题。

Redis 单线程如何处理那么多的并发客户端连接?

Redis的IO多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到 文件事件分派器,事件分派器将事件分发给事件处理器。

其实对于redis来讲,无论多少并发,到了redis层都会排队,一个一个的来处理

Info: 查看redis服务运行信息,分为 9 大块,每个块都有非常多的参数,这 9 个块分别是:

Server 服务器运行的环境参数
Clients 客户端相关信息
Memory 服务器运行内存统计数据

Persistence 持久化信息
Stats 通用统计数据
Replication 主从复制相关信息 CPU CPU 使用情况

Cluster 集群信息
KeySpace 键值对统计数量信息

缓存穿透

缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储 层查不到数据则不写入缓存层。
缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。

1. 解决:可以将空对象缓存起来或者设置一个特殊意义的字符串来标示此记录数据库中不存在,直接在缓存层返回

2. 布隆过滤器 对于恶意攻击,向服务器请求大量不存在的数据造成的缓存穿透,还可以用布隆过滤器先做一次过滤,对于不 存在的数据布隆过滤器一般都能够过滤掉,不让请求再往后端发送。当布隆过滤器说某个值存在时,这个值可 能不存在;当它说不存在时,那就肯定不存在。

缓存失效

由于大批量缓存在同一时间失效可能导致大量请求同时穿透缓存直达数据库,可能会造成数据库瞬间压力过大 甚至挂掉,对于这种情况我们在批量增加缓存时最好将这一批数据的缓存过期时间设置为一个时间段内的不同 时间。

int expireTime = new Random().nextInt(300) + 300;

bigkey

bigkey的坏处:

1. 带宽固定,千兆网卡(按照字节来算是 128M/s),假设一个key的value大小为1M,有1000个连接并发,1s所占用的带宽就是1000M,会造成网络堵塞。

2. redis堵塞,单线程处理bigkey有可能造成其他连接排队

在Redis中,一个字符串最大512MB,一个二级数据结构(例如hash、list、set、zset)可以存 储大约40亿个(2^32-1)个元素,但实际中如果下面两种情况,我就会认为它是bigkey。

1. 字符串类型:它的big体现在单个value值很大,一般认为超过10KB就是bigkey。

2. 非字符串类型:哈希、列表、集合、有序集合,它们的big体现在元素个数太多。

一般来说,string类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000(超过5000了可以采用分拆思想)

过期键清除策略

Redis对于过期键有三种清除策略:

· 被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key

· 主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key)

· 当前已用内存超过maxmemory限定时,触发主动清理策略

主动清理策略又分五种

· allkeys-lru:根据LRU算法删除键,不管数据有没有设置超时属性,直到腾出足够空间 为止。

· allkeys-random:随机删除所有键,直到腾出足够空间为止。

· volatile-random: 随机删除过期键,直到腾出足够空间为止。

· volatile-ttl:根据键值对象的ttl属性,删除最近将要过期数据。如果没有,回退到noeviction策略。 (常用

· noeviction:不会剔除任何数据,拒绝所有写入操作并返回客户端错误信息"(error)OOM command not allowed when used memory",此时Redis只响应读操作。

phper 在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那 里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、

高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql 优化、

shell 脚本、Docker、微服务、Nginx 等多个知识点高级进阶干货需要的可以免费分享给大家

这些的话是在下面的直播课中讲解过很多期,并且在不断更新中

更多学习内容请访问:

推荐视频:

redis从入门到精通实战教程: av83679805

swoole+docker+redis主从复制及读写分离: av78781841


我的官方群 点击此处。获取更多学习资料。

深圳SEO优化公司山南模板网站建设价格重庆企业网站改版哪家好横岗网站推广工具多少钱马鞍山设计公司网站多少钱三明网站改版推荐廊坊SEO按天收费包头模板网站建设报价黄石网站制作报价罗湖百度标王推荐太原阿里店铺托管推荐沈阳网站推广系统价格渭南企业网站制作报价宜昌seo排名推荐和田网站制作推荐乐山设计网站哪家好平凉企业网站建设报价白城网站定制推荐贵港百度竞价包年推广推荐吉安英文网站建设宣城网站关键词优化推荐重庆seo优化玉溪网站推广工具推荐北京百度爱采购多少钱鸡西高端网站设计推荐海西推广网站价格无锡网络营销价格台州阿里店铺运营公司襄樊seo网站推广公司鹤壁网站关键词优化多少钱绥化关键词排名多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化