Redis基本原理、优化和应用示例
- 格式:pdf
- 大小:429.18 KB
- 文档页数:12
redis基本原理、优化和应用示例目录1redis基本原理.........................................................................................................................11.1Redis是什么.................................................................................................................11.2Redis数据类型.............................................................................................................11.3Redis VS memcached....................................................................................................11.4Redis内存分配原理.....................................................................................................21.4.1String.................................................................................................................21.4.2Zipmap..............................................................................................................31.5Nosql对比...........................................................................................................................42redis优化.................................................................................................................................42.1redis内存优化.............................................................................................................42.2redis性能优化.............................................................................................................52.3压力测试......................................................................................................................62.4Redis监控.....................................................................................................................72.5优化实例......................................................................................................................82.5.1内存优化..........................................................................................................82.5.2性能优化..........................................................................................................83redis应用示例.........................................................................................................................91redis基本原理1.1Redis是什么REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis提供了一些丰富的数据结构,包括 lists, sets, ordered sets 以及 hashes ,当然还有和Memcached一样的 strings结构.Redis当然还包括了对这些数据结构的丰富操作。
1.2Redis数据类型
Redis最为常用的数据类型主要有以下五种:StringHashListSetSorted set
1.3Redis VS memcached
1)性能Redis在存储小数据时比Memcached性能更高;而在100k以上的数据中,Memcached性能要高于Redis;不过无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。2)内存使用率基本key-value,memcached的内存使用率比redis高;而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。3)数据持久化和同步如果有持久化或同步的需求,则选择redis4)Redis支持更多的数据结构和丰富的数据操作http://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
测试脚本#! /bin/bash
redis-cli info|grep used_memory:for (( start = 10000; start < 30000; start++ ))do redis-cli set a$start baaaaaaaa$start > /dev/nulldoneredis-cli info|grep used_memory:预估值>>> 20000 * (16 + 16 + 16 + 32) + 32768 * 4
17310721.4.2Zipmap
对于一个普通的subkey和value,只需要额外的3个字节(keylen,valuelen,freelen)来存储,另外的hash key也只需要额外的2个字节(zm头尾)来存储subkey的个数和结束符.
zipmap类型的内存大小 = hashkey个数 * (dictEntry大小 + redisObject大小 + 包含key的sds大小 + subkey的总大小) + bucket个数 * 4
测试脚本#! /bin/bash
redis-cli info|grep used_memory:for (( start = 100; start < 200; start++ ))do for (( start2 = 100; start2 < 400; start2++ )) do redis-cli hset test$start a$start2 "1" > /dev/null donedoneredis-cli info|grep used_memory:
这里subkey是同时申请的的,大小是300 * (5 + 3) + 2 =2402字节,实际申请的内存为2560.另外100hashkey的bucket是128.所以总的预估大小为>>> 100 * (16 + 16 + 16 + 2560) + 128 * 4261312
1.5Nosql对比类型部分代表特点
列存储HbaseCassandraHypertable顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。
文档存储MongoDBCouchDB文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。
key-value存储Tokyo Cabinet / TyrantBerkeley DBMemcacheDBRedis可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)
图存储Neo4JFlockDBInfoGrid图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。
对象存储db4oVersant通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。
xml数据库Berkeley DB XMLBaseX高效的存储XML数据,并支持XML的内部查询语法,比如