
Redis
源大郎
这个作者很懒,什么都没留下…
展开
-
《Redis深度历险》原理篇——线程IO模型 笔记
Redis作为一个用于高并发的中间缓存件自身确是单线程的(6之后支持多线程,只是将一些网络IO等交给工作线程了,数据上的交互还是会交还给主线程的),这是因为并发性能瓶颈大多不是在CPU上,而是内存以及IO上,这就需要考虑使用异步的方式。多路复用或者叫事件轮询,简单的说就是给一个死循环,不断的查看是否存在新的事件到来,有些还会提供一个timeout参数,在没有事件到来时,会阻塞一段时间,以节省cpu资源,这个死循环一次就叫一个周期,当采用类似的系统处理多种事件时,就可称这套系统调用称为多路复用API。指原创 2020-08-22 18:27:29 · 144 阅读 · 0 评论 -
《Redis深度历险》scan
Redis中的keys命令可以列出满足特定正则表达式所有的key.命令的格式为keys pattern但是它存在俩显著的缺点没有偏移量与限制个数时间复杂度是O(n)为解决此问题,2.8版本便加入年Scan指令。它有如下特点:时间复杂度仍为O(n),且通过游标分布进行。提供limit参数提供模式匹配功能服务器不需要为游标保存状态。返回结果会有重复遍历过程中若有数据修改,改动后的数据不一定会便利到。单次返回的结果是空的并不意味着遍历结束,而看返回的游标值。基本用法scan原创 2020-06-21 15:29:28 · 224 阅读 · 0 评论 -
《Redis深度历险》漏斗限流、GeoHash
漏斗限流上次学习的使用zset存储时间戳,比对滑动(时间)窗口内的操作数是否超出规定的方式来限流对于规定时间内操作不多的情况还是比较好用的,可是如果时间窗口内允许的规定操作次数太多了,就会引起耗费大量的内存空间,这时就需要使用到漏斗限流的方式。思想上大概就是,想象一个漏斗,如果容量(允许操作的次数之类)满了,为了不让它溢出必然只能暂停灌水(用户行为或者某种限流),漏斗下面也也有开口,当它流速大于灌水速度时,就不会暂停灌水,可是如果灌水速度大于了流速,那么就需要暂停一段时间灌水直到有可以容纳下一次灌水空间原创 2020-06-16 03:33:14 · 255 阅读 · 0 评论 -
《Redis深度历险》布隆过滤器,简单限流
布隆过滤器如果需要依据需要判断某个信息存不存在,则就无法使用HyperLogLog,它只能估测出大概存在多少个不同的值,但是由于数据都被处理过了,无法进行还原,且基于一定的概率性。比如如果需要对用户数据推荐某些东西,而不能推荐一些重复的内容时,HyperLogLog就无法使用了,这时就需要使用到布隆过滤器了,它是一种高级数据结构,布隆过滤器课节省90%的空间,只是稍微有点不精确,存在一定的误判率。是什么不是完全精确的SET可能会把没存在过的误判为存在,不会把存在误判不存在。在上述场景中,就可能会原创 2020-06-15 03:35:59 · 535 阅读 · 0 评论 -
《Redis深度历险》HyperLogLog
HyperLogLog基本使用如果需要统计UV(每日访问用户数),而不需要过于精确数据量又比较大的情况下可以采用这种结构,它的标准误差为0.81%,但是set结构要节省空间。它是Redis的一种高级数据结构。使用pfadd key element [element...] 来向key中增添emement(可增添多个)使用pfcount key获取数量可就能够很好的解决日活用户的问题还有pfmerge destkey sourcekey [sourcekey....]可用于汇总多个pf计数,注意原创 2020-06-12 06:17:44 · 182 阅读 · 0 评论 -
《Redis深度历险》——位图用法
近似可看为byte类型是数组,可用于存储用户签到之类的非此即彼的信息,而且比价节省空间。本质上还是个字符串类型。它是自动拓展的,如果偏移位置超出了现有的内容范围就会自动将位数组进行零扩充。零存整取setbit key offset value注意ASCII码的二进制顺序与这里是逆向映射的。(也就说位数是从高到低)零存零取getbit指令…整存零取因为本质是个字符串嘛,所以可以存储,按位取即可如果无法以字符的方式显示,则显示它的十六进制格式查找与统计bitcount key [s原创 2020-06-11 06:16:01 · 159 阅读 · 0 评论