SlideShare a Scribd company logo
1 of 32
Redis介绍 丹臣 2011-3-31
Redis是什么? Redis is an open source, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets. Redis author : antirez , from Italy     http://antirez.com/
Redis主体结构就是实现一个hash table Key的类型为sds Value的类型为redisobject
Redis在value上的不同设计之处
Redis的应用场景 对复杂数据结构的良好支持 像SNS中的关系,以及一些计数类的需求
Redis的常用操作 get/set/mset/mget lpush/lpop,lpush/rpop hget/hset/hgetall sadd/srem/spop/scard/sort del  key/move key index infor save/bgsave/bgrewriteaof/lastsave flushall
关系与分页 lpush,rpop,lpop实现队列与栈 与操作相关的两个配置参数: list-max-ziplist-entries  512 个数 list-max-ziplist-value   15     长度 如果任何一个条件不满足,进入listTypeConvert函数,转化成双链表 与lrange,mget组合,可以实现列表类的一些业务场景 与lrange,多次hgetall组合
结构化数据存取需求 redis> hsetdanchenguanzhu 195 (integer) 1 redis> hsetdanchen fans 3769 (integer) 1 redis> hsetdanchenmicroblogs 418 (integer) 1 redis>  redis>  redis> hgetalldanchen 1) "guanzhu" 2) "195" 3) "fans" 4) "3769" 5) "microblogs" 6) "418" 两个控制参数: hash-max-zipmap-entries 1024  hash-max-zipmap-value 100
新浪微博的Redis部署
新浪微博的Redis部署
新浪微博的Redis部署
新浪微博的Redis部署
集合sets操作 redis> srem students hi (integer) 1 redis> srem students hi (integer) 0 redis> spop students "danchen" redis> spop students "wwww" redis> scard students (integer) 4 redis> sort students 1) "hello" 2) "supu" 3) "wwww.taobao.com" 4) "baby" redis> sadd students danchen       (integer) 1 redis> sadd students baby       (integer) 1 redis> sadd students hello       (integer) 1 redis> sadd students hi       (integer) 1 redis> sadd students wwww        (integer) 1 redis> sadd students wwww.taobao.com       (integer) 1 redis> sadd students supu       (integer) 1 redis> sadd students supu       (integer) 0
Pipeline模式 发送多个命令,一次性接受多个命令 减少网络IO次数 服务器端将命令结果放进queue,再返回给客户端
Redis server的主流程
连接及处理命令流程 acceptTcpHandler readQueryFromClient processInputBuffer acceptCommonHandler processCommand createClient call aeCreateFileEvent(server.el,fd,AE_READABLE, readQueryFromClient, c)
自增长的hashtable 每个db对应两条hash table,大多数情况下只用第一条hash table,第二条在增量hash时会使用,增量hash采用阶段性完成,单次拷贝不能超过1ms,以免影响前台应用过多响应时间。 bucket初始大小为4,以2的倍数进行动态扩展。 作增量rehash的过程中,新的值将会写到第二条hash table里。
Hash_table的扩展条件 _dictKeyIndex(dict *d, const void *key) 调用_dictExpandIfNeeded(d)      判断条件: 当前已处于增量rehash过程中 return 当前hash table size =0 ? 初始化为4       elements/buckets >= 1:1
数据结构管理成本 每个redisObject会有16 bytes的管理开销 typedefstructredisObject {     unsigned type:4;     unsigned storage:2;     /* REDIS_VM_MEMORY or REDIS_VM_SWAPPING */     unsigned encoding:4;     unsigned lru:22;        /* lru time (relative to server.lruclock) */ intrefcount;     void *ptr;    /* 数据真正存放的地方*/ } robj;
数据结构管理成本 每个structdictEntry会有24 bytes的管理开销 typedefstructdictEntry {     void *key;     void *val; structdictEntry *next; } dictEntry;
Rdb持久化 Fork一个进程,利用copy on write原理,遍历所有db的hash table,进行整库的dump Save命令,shutdown命令,slave启动都会触发 利用LZF进行压缩 持久化触发条件: #save 900 1 #save 300 10 #save 60 10000
Aof持久化 Aof:把写操作指令连续的写到一个文件里面 当redis server异常crash掉的时候,重启时将会进行如下的操作: 假如只配置了aof,起动时加载aof文件 假如同时配置了rdb,aof,起动时只加载aof文件 假如只配置了rdb,起动时将加载dump文件
Redis replication 相当于mysql statement模式的SQL复制,以及ORACLE的逻辑standby.s master slave  log Slave也可以进行读写操作
复制对TPS的影响(-30%) 我自己写了一个jkc命令
复制时的jkc指令响应时间
Slave shutdown或者重启
Slave shutdown或者重启
不同的value_length(r:w=4:1)
不同的value_length(r:w=4:1)
Redis客户端 各种语言客户端支持 Java的Jedis,Jredis Php的Predis,phpredis Python的redis-py C的hiredis ….
Jedis客户端 Jedis,ShardJedis,ShardJedisPipeline 支持客户端分布式,ShardJedis。一致性哈希算法,采用TreepMap<String,ShardInfo>存储redis节点,murmur哈希函数计算key和server的值。默认虚拟160个节点,支持权重配置。 连接池管理。JedisPool。
Q/A thanks

More Related Content

What's hot

高性能No sql数据库redis
高性能No sql数据库redis高性能No sql数据库redis
高性能No sql数据库redis
paitoubing
 
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
Wensong Zhang
 
Mongo db 簡介
Mongo db 簡介Mongo db 簡介
Mongo db 簡介
昱劭 劉
 
云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现 云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现
july19850903
 

What's hot (19)

Redis分享
Redis分享Redis分享
Redis分享
 
高性能No sql数据库redis
高性能No sql数据库redis高性能No sql数据库redis
高性能No sql数据库redis
 
淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践
 
Redis 介绍 -田琪
Redis 介绍 -田琪Redis 介绍 -田琪
Redis 介绍 -田琪
 
Mongo db 簡介
Mongo db 簡介Mongo db 簡介
Mongo db 簡介
 
Mongo db 特性
Mongo db 特性Mongo db 特性
Mongo db 特性
 
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践
 
cdn的那些事儿
cdn的那些事儿cdn的那些事儿
cdn的那些事儿
 
Hbase
HbaseHbase
Hbase
 
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
 
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangBuilding the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
 
Hbase架构简介、实践
Hbase架构简介、实践Hbase架构简介、实践
Hbase架构简介、实践
 
网站存储经验谈pdf
网站存储经验谈pdf网站存储经验谈pdf
网站存储经验谈pdf
 
應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局
 
Hdfs
HdfsHdfs
Hdfs
 
云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现 云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现
 
Cephfs架构解读和测试分析
Cephfs架构解读和测试分析Cephfs架构解读和测试分析
Cephfs架构解读和测试分析
 
SSDB(LevelDB server) vs Redis
SSDB(LevelDB server) vs RedisSSDB(LevelDB server) vs Redis
SSDB(LevelDB server) vs Redis
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈
 

Viewers also liked

Reducing Risk When Upgrading MySQL
Reducing Risk When Upgrading MySQLReducing Risk When Upgrading MySQL
Reducing Risk When Upgrading MySQL
Kenny Gryp
 
MySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD TourMySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD Tour
Ronald Bradford
 

Viewers also liked (20)

Mysql For Developers
Mysql For DevelopersMysql For Developers
Mysql For Developers
 
Reducing Risk When Upgrading MySQL
Reducing Risk When Upgrading MySQLReducing Risk When Upgrading MySQL
Reducing Risk When Upgrading MySQL
 
Hbase源码初探
Hbase源码初探Hbase源码初探
Hbase源码初探
 
MySQL Backup and Recovery Essentials
MySQL Backup and Recovery EssentialsMySQL Backup and Recovery Essentials
MySQL Backup and Recovery Essentials
 
MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...
MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...
MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...
 
MySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD TourMySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD Tour
 
MySQL High Availability and Disaster Recovery with Continuent, a VMware company
MySQL High Availability and Disaster Recovery with Continuent, a VMware companyMySQL High Availability and Disaster Recovery with Continuent, a VMware company
MySQL High Availability and Disaster Recovery with Continuent, a VMware company
 
2010丹臣的思考
2010丹臣的思考2010丹臣的思考
2010丹臣的思考
 
MySQL InnoDB Cluster - A complete High Availability solution for MySQL
MySQL InnoDB Cluster - A complete High Availability solution for MySQLMySQL InnoDB Cluster - A complete High Availability solution for MySQL
MySQL InnoDB Cluster - A complete High Availability solution for MySQL
 
Mysql high availability and scalability
Mysql high availability and scalabilityMysql high availability and scalability
Mysql high availability and scalability
 
Mysql参数-GDB
Mysql参数-GDBMysql参数-GDB
Mysql参数-GDB
 
A New Architecture for Group Replication in Data Grid
A New Architecture for Group Replication in Data GridA New Architecture for Group Replication in Data Grid
A New Architecture for Group Replication in Data Grid
 
MySQL Replication Performance Tuning for Fun and Profit!
MySQL Replication Performance Tuning for Fun and Profit!MySQL Replication Performance Tuning for Fun and Profit!
MySQL Replication Performance Tuning for Fun and Profit!
 
MySQL aio
MySQL aioMySQL aio
MySQL aio
 
Java MySQL Connector & Connection Pool Features & Optimization
Java MySQL Connector & Connection Pool Features & OptimizationJava MySQL Connector & Connection Pool Features & Optimization
Java MySQL Connector & Connection Pool Features & Optimization
 
MySQL High Availability Solutions
MySQL High Availability SolutionsMySQL High Availability Solutions
MySQL High Availability Solutions
 
MySQL High Availability Deep Dive
MySQL High Availability Deep DiveMySQL High Availability Deep Dive
MySQL High Availability Deep Dive
 
Group Replication: A Journey to the Group Communication Core
Group Replication: A Journey to the Group Communication CoreGroup Replication: A Journey to the Group Communication Core
Group Replication: A Journey to the Group Communication Core
 
MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)
 
Advanced Percona XtraDB Cluster in a nutshell... la suite
Advanced Percona XtraDB Cluster in a nutshell... la suiteAdvanced Percona XtraDB Cluster in a nutshell... la suite
Advanced Percona XtraDB Cluster in a nutshell... la suite
 

Similar to Redis介绍

Redis介绍
Redis介绍Redis介绍
Redis介绍
锐 张
 
Hbase使用hadoop分析
Hbase使用hadoop分析Hbase使用hadoop分析
Hbase使用hadoop分析
baggioss
 
Redis slideshare
Redis slideshareRedis slideshare
Redis slideshare
liaoxu
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
Kay Yan
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
airsex
 
Hbase在淘宝的应用与优化 修改
Hbase在淘宝的应用与优化 修改Hbase在淘宝的应用与优化 修改
Hbase在淘宝的应用与优化 修改
yp_fangdong
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
zhen chen
 
Another Introduce to Redis
Another Introduce to RedisAnother Introduce to Redis
Another Introduce to Redis
jiaqing zheng
 
Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.ppt
james tong
 
Hadoop系统及其关键技术
Hadoop系统及其关键技术Hadoop系统及其关键技术
Hadoop系统及其关键技术
冬 陈
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计
锐 张
 

Similar to Redis介绍 (20)

Redis介绍
Redis介绍Redis介绍
Redis介绍
 
Hbase使用hadoop分析
Hbase使用hadoop分析Hbase使用hadoop分析
Hbase使用hadoop分析
 
Redis slideshare
Redis slideshareRedis slideshare
Redis slideshare
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
 
Redis 存储分片之代理服务twemproxy 测试
Redis 存储分片之代理服务twemproxy 测试Redis 存储分片之代理服务twemproxy 测试
Redis 存储分片之代理服务twemproxy 测试
 
Hbase在淘宝的应用与优化 修改
Hbase在淘宝的应用与优化 修改Hbase在淘宝的应用与优化 修改
Hbase在淘宝的应用与优化 修改
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
 
Erlang游戏开发
Erlang游戏开发Erlang游戏开发
Erlang游戏开发
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
deep inside Sina App Engine cloud service
deep inside Sina App Engine cloud servicedeep inside Sina App Engine cloud service
deep inside Sina App Engine cloud service
 
Sae
SaeSae
Sae
 
Another Introduce to Redis
Another Introduce to RedisAnother Introduce to Redis
Another Introduce to Redis
 
Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.ppt
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010
 
Hadoop-分布式数据平台
Hadoop-分布式数据平台Hadoop-分布式数据平台
Hadoop-分布式数据平台
 
Thinking in React by Deot
Thinking in React by Deot Thinking in React by Deot
Thinking in React by Deot
 
Hadoop系统及其关键技术
Hadoop系统及其关键技术Hadoop系统及其关键技术
Hadoop系统及其关键技术
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计
 

Redis介绍