这篇是个人对Redis的总结,供日后参考。
参考:
redis 菜鸟教程:http://www.runoob.com/redis/redis-tutorial.html
redis 内部数据结构详解:https://zhuanlan.zhihu.com/p/21368183?refer=zhangtielei
redis 原理方法双管齐下:https://yq.aliyun.com/articles/67122
一、定义
- REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
- Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
- 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
二、数据结构
(图片来自 https://yq.aliyun.com/articles/67122)
所有redis 对象都被封装成RedisObject,其中type 表示对象类型,ecoding 表示编码方式,其中type 具体类型包括下图五种类型:
(图片来自 https://yq.aliyun.com/articles/67122)
其中redis,分为两个层面的数据结构
第一层提供给使用者的数据结构:分为 string,list,set,hash,sorted set(如上图所示)
第二层内部具体实现:dict(ht),sds,ziplist,qucklist,skiplist,其中具体对应关系如下图:
(图片来自 https://yq.aliyun.com/articles/67122)
举个例子:redis>set str "123" 其中key:“str”,value:"123",其中创建了两个redisobject对象,一个是字符串类型的key,一个是字符串类型的value。
其中redis数据库又是通过dict存储所有键值对的,所有的key都是字符串的对象,value可以是字符串对象、哈希对象、列表对象等
三、内存管理(淘汰策略)
如果设置了最大内存,当数据保存超过最大内存时会根据设置的淘汰策略删除超出的数据(如果没有设置淘汰策略,则会所有请求全部返回错误)。具体淘汰策略如下:
(图片来自 https://yq.aliyun.com/articles/67122)
四、内存分析
目标:提取业务特点,了解业务平静,发现业务bug;
方法1:离线分析法(redis-rdb-tool)
①生成rdb文件(bgsave)②生成内存快照 ③分析内存快照。 其中生成的内存快照为csv格式,
其中数据 database :数据库id,type:数据类型,key:key,size_in_bytes:理论内存值,ecoding:编码方式,num_elements:成员个数。
可以将csv导入数据库可以查询来分析数据
方法2:线上分析法(不推荐)具体参考:https://yq.aliyun.com/articles/67122