redis基本原理、优化和应用示例
目录
1redis基本原理 (1)
1.1Redis是什么 (1)
1.2Redis数据类型 (1)
1.3Redis VS memcached (1)
1.4Redis内存分配原理 (2)
1.4.1String (2)
1.4.2Zipmap (3)
1.5Nosql对比 (4)
2redis优化 (4)
2.1redis内存优化 (4)
2.2redis性能优化 (5)
2.3压力测试 (6)
2.4Redis监控 (7)
2.5优化实例 (8)
2.5.1内存优化 (8)
2.5.2性能优化 (8)
3redis应用示例 (9)
1redis基本原理
1.1Redis是什么
RE mote DI ctionary S erver(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis提
供了一些丰富的数据结构,包括 lists, sets, ordered sets 以及 hashes ,当然还有和Memcached一样的 strings结构.Redis当然还包括了对这些数据结构的丰富操作。
1.2Redis数据类型
Redis最为常用的数据类型主要有以下五种:
∙String
∙Hash
∙List
∙Set
∙Sorted set
1.3Redis VS memcached
1)性能
Redis在存储小数据时比Memcached性能更高;
而在100k以上的数据中,Memcached性能要高于Redis;
不过无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。
2)内存使用率
基本key-value,memcached的内存使用率比redis高;
而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。
3)数据持久化和同步redis支持的五种数据类型
如果有持久化或同步的需求,则选择redis
4)Redis支持更多的数据结构和丰富的数据操作
redis.io/commands/
1.4Redis内存分配原理
1.4.1String
一个set hello world命令最终(中间会malloc,free的我们不考虑)会产生4个对象,一个dictEntry(12字节),一个sds用于存储key,还有一个redisObject(12字节),还
有一个存储string的sds.sds对象除了包含字符串本生之外,还有一个sds
header和额外的一个字节作为字符串结尾共9个字节.
这个命令最终申请的内存为16(dictEtnry) + 16 (redisObject) + 16(“hello”) + 16(“world”),一共64字节.注意如果key或者value的字符串长度+9字节超过16字节,则实际申请的内存大小32字节.
String类型内存计算公式:
string类型的内存大小= 键值个数* (dictEntry大小+ redisObject大小+ 包含key的sds大小 + 包含value的sds大小) + bucket个数 * 4
1.4.2Zipmap
对于一个普通的subkey和value,只需要额外的3个字节
(keylen,valuelen,freelen)来存储,另外的hash key也只需要额外的2个字节(zm头尾)来存储subkey的个数和结束符.
zipmap类型的内存大小 = hashkey个数 * (dictEntry大小 + redisObject大小 + 包含key的sds大小 + subkey的总大小) + bucket个数 * 4
这里subkey 是同时申请的的,大小是
300 * (5 + 3) + 2 =2402字节,实际申请的内存为2560.另外100hashkey 的bucket 是128.所以总的预估大小为
1.5Nosql 对比
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论