202203-21 Redis官方可视化工具RedisInsight功能真心强大 NEW 背景最近逛了一下Redis官方网站,发现Redis不仅推出了很多新特性,而且还发布了一款可视化工具RedisInsight。试用了一下感觉非常不错,最关键的是能支持RedisJSON之类的新特性,这是第三方工具无法比拟的。今天带大家体验一下RedisInsight,确实非常好用!RedisInsight简介RedisInsight是Redis官方出品的可视化管理工具,可用于设计、开发、优化你的Redis应用。支持深色和浅色两种主题,界面非常炫酷!可支持String、Hash、... Read More >
202201-10 Redis布隆防击穿实战 NEW 背景我们圣诞节在生产上碰到了每秒万级并发,经过WAF结合相关日志分析我们发觉我们在小程序上有几个接口被人泛滥了很利害。而这几个接口我们前端是使用了varnish来做缓存的,理论上因该都是毫秒级返回的。不应该对生产由其首页造成过多的压力呀?于是我们找了近百个用户的实际请求,进行了“回放”,发觉这几个请求的response time远远高于了我们的varnish对前端返回的速度。于是我们进一步分析,发现问题出在了这几个请求-都是get方法且问号(?)后面带的参数的value竟然都... Read More >
202102-20 《Redis官方文档》用Redis构建分布式锁 NEW 用Redis构建分布式锁在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段。 有很多三方库和文章描述如何用Redis实现一个分布式锁管理器,但是这些库实现的方式差别很大,而且很多简单的实现其实只需采用稍微增加一点复杂的设计就可以获得更好的可靠性。 这篇文章的目的就是尝试提出一种官方权威的用Redis实现分布式锁管理器的算法,我们把这个算法称为RedLock,我们相信这个算法会比一般的普通方法更加安全可靠。我们也希望社区能一起分析这个算法,提供一些反... Read More >
201907-15 Redis内存分析工具之redis-rdb-tools的安装与使用 1.redis-rdb-tools工具是用python语言编写的,所以首先需要安装python:安装:(1)用 wget 下载 python 2.7 并解压( 如果没有 wget,先用下面命令安装 wget )yum -y install wget(2)进入目录 /usr/src 再用 wget 下载 python 2.7cd /usr/src/ && wget&nb... Read More >
201907-14 redis批量删除key的小技巧,你知道吗 在使用redis的过程中,经常会遇到要批量删除某种规则的key,但是redis提供了批量查询一类key的命令keys或scan,没有提供批量删除某种规则key的命令,怎么办?看完本文即可,哈哈。本文目录一、使用keys+xargs实现1.连接redis,初始数据2.使用keys命令查看数据3.退出redis的客户端4.使用keys+xargs批量删除5.注意事项二、使用scan+xargs实现1.使用scan+xargs批量删除三、xargs命令介绍一、使用keys+xarg... Read More >
201907-13 Redis-PHP实战篇——常用的使用场景 redis-php实战public function getRedis() { $redis = new \Redis(); $redis->connect(env("REDIS_MASTER",'127.0.0.1'),6379); ... Read More >
201907-13 PHP-redis中文文档 phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系很有用;以下是redis官方提供的命令使用技巧:下载地址如下:https://github.com/owlient/phpredis(支持redis 2.0.4)phpredis是php的一个扩展 Redis::__construct构造函数 $redis = new Redis();connect, open 链接redis服务参数host: string,服务地址port:... Read More >
201904-15 redis超时时间和连接数查询与设置 redis客户端连接数redis通过监听一个TCP端口或socket的方式接收来自客户端的连接, 当与客户端建立连接后,redis内部会进行如下操作: (1)客户端socket会被设置为非阻塞模式,因为redis在网络时间处理上采用的是非阻塞多路复用模型; (2)然后为这个socket设置TCP_NODELAY属性,禁用Nagle算法; (3)然后创建一个可读的文件事件用于监听这个客户端socket的数据发送。redis连接数与最大连接数1.查看方法1:在redis-cl... Read More >
201904-13 redis中分析key大小的几种方法 背景当redis被用作缓存时,有时我们希望了解key的大小分布,或者想知道哪些key占的空间比较大。本文提供了几种方法。一. bigKeys这是redis-cli自带的一个命令。对整个redis进行扫描,寻找较大的key。例:redis-cli -h localhost -p 6379 -a password --bigkeys输出:# Scanning the entire&... Read More >
201904-12 redis的bigkey问题如何解决 寻找big key有如下几种方法redis-cli自带--bigkeys,例如:redis-cli -h -a --bigkeys获取生产Redis的rdb文件,通过rdbtools分析rdb生成csv文件,再导入MySQL或其他数据库中进行分析统计,根据size_in_bytes统计bigkey通过python脚本,迭代scan key,每次scan 1000,对扫描出来的key进行类型判断,例如:string长度大于10K,list长度大于10240认为是big bigk... Read More >
201904-11 redis的热key问题如何解决 概念其实热key问题说来也很简单,就是瞬间有几十万的请求去访问redis上某个固定的key,那么,这样会造成流量过于集中,达到物理网卡上限,从而导致这台redis的服务器宕机。那接下来这个key的请求,就会直接怼到你的数据库上,导致你的服务不可用。hot key和big key问题,大家一定要有所了解。热key危害流量集中,达到物理网卡上限请求过多,缓存服务被打垮DB击穿,引起业务雪崩怎么发现热key1. 凭借业务经验,进行预估哪些是热key其实这个方法还是挺有可行性的。比如... Read More >
201705-26 redis scan命令的count参数 背景今天业务功能中想用sscan实现某个功能,突然发现count并不起作用,不管count 传什么,都返回所有的数据127.0.0.1:6379[13]> sSCAN comment:posts_list_zset_all_20_19097 "" match "*" count 2 1) "0" 2) 1)... Read More >
201705-25 redis中过期数据的删除以及对性能的影响 过期数据的删除对Redis性能影响当我们对某些 key 设置了 expire 时,数据到了时间会自动删除。如果一个键过期了,它会在什么时候删除呢?下面介绍三种删除策略:定时删除 在这是键的过期时间的同时,创建一个定时器 Timer,让定时器在键过期时间来临时立即执行对过期键的删除。惰性删除 键过期后不管,每次读取该键时,判断该键是否过期... Read More >
201705-22 redis中底层的编码转换 编码转化Redis 使用对象(redisObject)来表示数据库中的键值,当我们在 Redis 中创建一个键值对时,至少创建两个对象,一个对象是用做键值对的键对象,另一个是键值对的值对象。例如我们执行 SET MSG XXX 时,键值对的键是一个包含了字符串“MSG”的对象,键值对的值对象是包含字符串”XXX”的对象。redisObject 的结构如下:typedef struct&n... Read More >
201705-21 redis中压缩列表ziplist的使用 压缩列表压缩列表 ziplist 是为 Redis 节约内存而开发的,是列表键和字典键的底层实现之一。当元素个数较少时,Redis 用 ziplist 来存储数据,当元素个数超过某个值时,链表键中会把 ziplist 转化为 linkedlist,字典键中会把 ziplist 转化为 hashtable。ziplist 是由一系列特殊编码... Read More >
201705-19 redis中zset有序集合的底层实现 跳跃表Zset 是一个有序的链表结构,其底层的数据结构是跳跃表 skiplist,其结构如下:typedef struct zskiplistNode { //成员对象 robj *obj; //分值 //后退指针 &... Read More >
201705-17 redis中字典的底层实现 哈希表概述 表现为:存储位置 = f(key); 存储过程如下:根据 key 计算出它的 hash 值 h。 假设箱子的个数为 n,那么这个键值对应该放在第(h%n)个箱子中。如果该箱子中已经有了键值对,就是用开放寻址法或者拉... Read More >
201705-15 redis中字符串的底层实现-SDS 概述Redis 是用 C 语言开发完成的,但在 Redis 字符串中,并没有使用 C 语言中的字符串,而是用一种称为 SDS(Simple Dynamic String)的结构体来保存字符串。struct sdshdr { int len; int&... Read More >
201705-12 redis中缓存穿透与缓存雪崩缓存击穿 背景缓存系统不得不考虑的另一个问题是缓存穿透与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个存在的数据每次请求都要到存储层去查询,失去了缓存的意义。有 很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。一个更为简... Read More >
201704-09 redis中单线程为什么这么快 一. Redis性能如此高的原因1. 纯内存操作,内存的读写速度非常快2. 单线程,保证了每个操作的原子性,省去了很多上下文切换线程的时间3. 高效的数据结构,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。4. 合理的数据编码5.Redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在i... Read More >