redis 学习笔记

1、使用INFOcommandstats 查看所有命令统计的快照,比如命令执行了多少次,执行命令所耗费的毫秒数(每个命令的总时间和平均时间),

只需要简单地执行 CONFIG RESETSTAT 命令就可以重置,这样你就可以得到一个全新的统计结果。

2、用 scan  代替 keys *

3、redis-cli -h localhost -p 6379 client list | grep -v "omem=0"这条命令在排查redis慢的时候绝对是神技。一般阻塞的命令都会导致omem不断升高,这条命令快速找到引起阻塞的命令

4、通常我们可以通过redis慢日志来找到引起redis慢的命令,用法为slowlog get 10来查看最慢的10条命令,然后针对性的进行优化。慢日志可以通过redis.conf或者   运行时

	CONFIG SET slowlog-log-slower-than 5000  
	CONFIG SET slowlog-max-len 25

来设置slowlog参数,其中slowlog-log-slower-than表示执行时间超过该值(单位毫秒)的命令记为慢查询,slowlog-max-len可以设置记录的最大条数。可以通过slowlog reset命令来重置慢日志记录。

5、避免使用慢查询语句如:keys *, flushall, drop table, update table set a=1 等,可通过slowlog 进行监控

6、redis的键名最佳命名规则:对象类型:对象ID:对象属性,比如user:6:friends来存储ID为6的用户的好友列表,对于多个单词则推荐使用.分隔符,另外可读性也非常重要,不要省这么一点点空间。

7、redis监控工具RedisLive:http://www.nkrode.com/article/real-time-dashboard-for-redis (需要先安装Python环境)

8、redis的内部结构dict 是一个基于哈希表的算法,一个dict包含两个dictht,用于在重hash时进行增量式哈希。重哈希的过程中,在dictht[0]上以bucket为单位,对其中的key进行哈希计算映射到dictht[1]中,每次的CRUD都会触发部分的重哈希操作,其中增加操作只会将要增加的k-v插入到dictht[1]上。一个database所有的 key和value的映射都是通过dict来维护的。

9、redisobj所表示的就是Redis对外暴露的第一层面的数据结构:string, list, hash, set, sorted set,而每一种数据结构的底层实现所对应的是哪个(或哪些)第二层面的数据结构(dict, sds, ziplist, quicklist, skiplist, 等),则通过不同的encoding来区分。可以说,redisobj是联结两个层面的数据结构的桥梁

10、一个ziplist整体占用一大块内存。它是一个表(list),但其实不是一个链表(linked list),ziplist本来就设计为各个数据项挨在一起组成连续的内存空间,这种结构并不擅长做修改操作。一旦数据发生改动,就会引发内存realloc,可能导致内存拷贝。

11、hash随着数据的增大,其底层数据结构的实现是会发生变化的,当然存储效率也就不同。在field比较少,各个value值也比较小的时候,hash采用ziplist来实现;而随着field增多和value值增大,hash可能会变成dict来实现。当hash底层变成dict来实现的时候,它的存储效率就没法跟那些序列化方式相比了。

12、quicklist的每个节点都是一个ziplist,ziplist本身也是一个有序列表,而且是一个内存紧缩的列表(各个数据项在内存上前后相邻)。比如,一个包含3个节点的quicklist,如果每个节点的ziplist又包含4个数据项,那么对外表现上,这个list就总共包含12个数据项。

13、当数据较少时,sorted set是由一个ziplist来实现的。当数据多的时候,sorted set是由一个叫zset的数据结构来实现的,这个zset包含一个dict + 一个skiplist。dict用来查询数据到分数(score)的对应关系,而skiplist用来根据分数查询数据(可能是范围查找)。

14、redis一个database里的所有key-value数据都是由dict数据结构来维护的,其中key对应的数据结构是sds,而value的数据结构是redisobjs。redisobjs结构内type指定对外的数据类型(string,list,set,hash,sorted set),enconding指定内部存储对应的数据结构(sds,ziplist,quicklist,dict,skiplist...)

15、在使用 JedisPool 连接redis时,注意设置jedispool 的链接数大小,当连接数超过该值时,jedispool 会进行阻塞处理。

16、如果master同时收到多个slave发来的同步连接命令,master只会启动一个进程来写数据库镜像,然后发送给所有的slave。master同步数据时是非阻塞式的,可以接收用户的读写请求。然而在slave端是阻塞模式的,slave在同步master数据时,并不能够响应客户端的查询。

17、查看所有的连接客户端命名:redis-cli client list


尚硅谷是一个教育机构,他们提供了一份关于Redis学习笔记。根据提供的引用内容,我们可以了解到他们提到了一些关于Redis配置和使用的内容。 首先,在引用中提到了通过执行命令"vi /redis-6.2.6/redis.conf"来编辑Redis配置文件。这个命令可以让你进入只读模式来查询"daemonize"配置项的位置。 在引用中提到了Redis会根据键值计算出应该送往的插槽,并且如果不是该客户端对应服务器的插槽,Redis会报错并告知应该前往的Redis实例的地址和端口。 在引用中提到了通过修改Redis的配置文件来指定Redis的日志文件位置。可以使用命令"sudo vim /etc/redis.conf"来编辑Redis的配置文件,并且在文件中指定日志文件的位置。 通过这些引用内容,我们可以得出结论,尚硅谷的Redis学习笔记涵盖了关于Redis的配置和使用的内容,并提供了一些相关的命令和操作示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis学习笔记--尚硅谷](https://blog.csdn.net/HHCS231/article/details/123637379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis学习笔记——尚硅谷](https://blog.csdn.net/qq_48092631/article/details/129662119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值