1 / 35

Redis Key/Value DB

Redis Key/Value DB. 云端事业部 / 云安全工程部 —— 周波. 目录. Redis 简介 Nosql DB 简介 和 Memcached 的比较 数据结构 存储结构及存储格式 Redis 的安装、操作和应用举例 常用命令 参考资料. Redis 简介. redis 是一个 key-value 存储系统 。 和 Memcached 类似,它支持存储的 value 类型相对更多,包括 string( 字符串 ) 、 list( 链表 ) 、 set( 集合 ) 和 zset( 有序集 合 ) 。

talasi
Download Presentation

Redis Key/Value DB

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Redis Key/Value DB 云端事业部/云安全工程部——周波

  2. 目录 Redis简介 Nosql DB简介 和Memcached的比较 数据结构 存储结构及存储格式 Redis的安装、操作和应用举例 常用命令 参考资料

  3. Redis 简介 redis是一个key-value存储系统。 和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集 合)。 这些数据类型支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的,支持各种不同方式的排序。 redis 与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改 操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

  4. Nosql DB简介 什么是Nosql DB? NoSQL,意即反SQL运动,是一种非关系型的数据存储,key/value键值对存储。 现有Nosql DB 产品 Redis/MongoDB/Memcached/Hbase/Cassandra/ Tokyo Cabinet/Voldemort/Dynomite/Riak/ CouchDB/Hypertable/Flare/Tin/Lightcloud/ KiokuDB/Scalaris/Kai/ThruDB,  ......

  5. Nosql DB简介 为什么要使用NOSQL非关系数据库? High performance - 对数据库高并发读写的需求 Huge Storage - 对海量数据的高效率存储和访问的需求 High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求

  6. Redis与Memcached 比较 相同点 Redis和Memcached都是开源项目,都提供很多的client库可供选择。 两者都是Nosql DB,且都在内存存储数据,处理数据速度快。

  7. Redis与Memcached 比较 功能上差异 从协议上看,Redis提供更多的数据结构和操作,如set, stack, range操作等 Redis不仅仅是个cache,提供persistent和chain replication,加上#1,可以近似替代Memcached+MySQL Redis支持不同的db空间,通过selectdb来切换到不同的db空间。从而实现数据的隔离。 Memcached提供binary protocol和sasl协议,ms Redis还没有支持

  8. Redis与Memcached 比较 实现上差异 内存管理方式差别很大,Redis使用独立的VM管理内存,将大部分value进行压缩后放到磁盘上,类似swap out的概念 Memcached使用libevent库,而Redis则原生的使用了epoll,kqueue等多个异步通信模型

  9. Redis与Memcached 比较 性能上差异 网络上众说纷纭,有的说redis快,有的说Memcached快。以下是网络上提供的一组性能比较数据。

  10. Redis与Memcached 比较

  11. Redis与Memcached 比较

  12. Redis与Memcached 比较

  13. Redis 数据结构 redis目前提供四种数据类型:string,list,set及zset(sorted set)。

  14. Redis数据存储结构 redis使用了两种文件格式:全量数据和增量请求。 全量数据格式是把内存中的数据写入磁盘, 便于下次读取文件进行加载; 增量请求文件则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,序列化的操作包括SET、RPUSH、SADD、ZADD。

  15. Redis数据存储格式 Redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。 save seconds updates :指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。 appendonly yes/no :是否在每次更新操作后进行日志记录。 appendfsync no/always/everysec :数据缓存同步至磁盘的方式。

  16. Redis的安装 下载安装源码包 >wget‘http://code.google.com/p/redis/downloads/detail?name=redis-2.0.4.tar.gz’ >tar xzf redis-2.0.4.tar.gz >cd redis-2.0.4 >make

  17. Redis工具 redis-server:Redis服务器的daemon启动程序 redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作 redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能 redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况。

  18. Redis的配置 daemonize:是否以后台daemon方式运行 pidfile:pid文件位置 port:监听的端口号 timeout:请求超时时间 loglevel:log信息级别 logfile:log文件位置 databases:开启数据库的数量 save * *:保存快照的频率,可设置多个条件。 rdbcompression:是否使用压缩 dbfilename:数据快照文件名

  19. Redis的配置 dir:数据快照的保存目录(这个是目录) appendonly:每次写操作会记一条log appendfsync:如何同步到磁盘 slaveof <masterip> <masterport>:配置主从服务器

  20. Redis操作 启动Redis Server >./redis-server 这样会加载默认配置redis.conf,也可配置多个redis端口,启动时指定配置文件: >./redis-server redis_6380.conf

  21. Redis操作 内置client访问Redis Server >./redis-cli redis> set foo bar OK redis> get foo "bar" >./redis-cli -p 6380 info

  22. Redis操作

  23. Redis新特性 Sub/Pub(发布/订阅) Pub/Sub功能(即Publish,Subscribe)意思是发布及订阅功能。简单的理解就像我们订阅blog一样,不同的是,这里的客户端与server端采用长连接建立推送机制,一个客户端发布消息,可以在多个客户端收到通知。

  24. Redis新特性应用 SCMQ(云安全消息队列)

  25. Redis 备份机制 Redis支持master-slave的主从配置,配置方法是在从机的配置文件中指定slaveof参数为主机的ip和port即可, 其数据复制方式可以是一主一从或者是一主多从的方式,Redis在master是非阻塞模式,也就是说在slave执行数据同步的时候,master是可以接受客户端的请求的,并不影响同步数据的一致性,然而在slave端是阻塞模式的,slave在同步master数据时,并不能够响应客户端的查询, Redis的master/slave模式下,master提供数据读写服务,而slave只提供读服务

  26. Redis 备份应用

  27. Redis 备份应用

  28. Redis命令总结 连接操作相关的命令 quit:关闭连接(connection) auth:简单密码认证 持久化 save:将数据同步保存到磁盘 bgsave:将数据异步保存到磁盘 lastsave:返回上次成功将数据保存到磁盘的Unix时戳 shundown:将数据同步保存到磁盘,然后关闭服务 远程服务控制 info:提供服务器的信息和统计 monitor:实时转储收到的请求 slaveof:改变复制策略设置 config:在运行时配置Redis服务器

  29. Redis命令总结 对value操作的命令 exists(key):确认一个key是否存在 del(key):删除一个key type(key):返回值的类型 keys(pattern):返回满足给定pattern的所有key randomkey:随机返回key空间的一个 keyrename(oldname, newname):重命名key dbsize:返回当前数据库中key的数目 expire:设定一个key的活动时间(s) ttl:获得一个key的活动时间 select(index):按索引查询 move(key, dbindex):移动当前数据库中的key到dbindex数据库 flushdb:删除当前选择数据库中的所有key flushall:删除所有数据库中的所有key

  30. Redis命令总结 对String操作的命令 set(key, value):给数据库中名称为key的string赋予值value get(key):返回数据库中名称为key的string的value getset(key, value):给名称为key的string赋予上一次的value mget(key1, key2,…, key N):返回库中多个string的value setnx(key, value):添加string,名称为key,值为value setex(key, time, value):向库中添加string,设定过期时间time mset(key N, value N):批量设置多个string的值 msetnx(key N, value N):如果所有名称为key i的string都不存在, incr(key):名称为key的string增1操作 incrby(key, integer):名称为key的string增加integer decr(key):名称为key的string减1操作 decrby(key, integer):名称为key的string减少integer append(key, value):名称为key的string的值附加value substr(key, start, end):返回名称为key的string的value的子串

  31. Redis命令总结 对List操作的命令 rpush(key, value):在名称为key的list尾添加一个值为value的元素 lpush(key, value):在名称为key的list头添加一个值为value的 元素 llen(key):返回名称为key的list的长度 lrange(key, start, end):返回名称为key的list中start至end之间的元素 ltrim(key, start, end):截取名称为key的list lindex(key, index):返回名称为key的list中index位置的元素 lset(key, index, value):给名称为key的list中index位置的元素赋值 lrem(key, count, value):删除count个key的list中值为value的元素。 lpop(key):返回并删除名称为key的list中的首元素 rpop(key):返回并删除名称为key的list中的尾元素 blpop(key1, key2,… key N, timeout):lpop命令的block版本。 brpop(key1, key2,… key N, timeout):rpop的block版本。 rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部

  32. Redis命令总结 对Set操作的命令 sadd(key, member):向名称为key的set中添加元素member srem(key, member) :删除名称为key的set中的元素member spop(key) :随机返回并删除名称为key的set中一个元素 smove(srckey, dstkey, member):移到集合元素 scard(key) :返回名称为key的set的基数 sismember(key, member) :member是否是名称为key的set的元素 sinter(key1, key2,…key N) :求交集 sinterstore(dstkey, (keys)):求交集并将交集保存到dstkey的集合 sunion(key1, (keys)):求并集 sunionstore(dstkey, (keys)):求并集并将并集保存到dstkey的集合 sdiff(key1, (keys)) :求差集 sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合 smembers(key) :返回名称为key的set的所有元素 srandmember(key) :随机返回名称为key的set的一个元素

  33. Redis命令总结 对Hash操作的命令 hset(key, field, value):向名称为key的hash中添加元素field hget(key, field):返回名称为key的hash中field对应的value hmget(key, (fields)):返回名称为key的hash中field i对应的value hmset(key, (fields)):向名称为key的hash中添加元素field  hincrby(key, field, integer):将名称为key的hash中field的value增加integer hexists(key, field):名称为key的hash中是否存在键为field的域 hdel(key, field):删除名称为key的hash中键为field的域 hlen(key):返回名称为key的hash中元素个数 hkeys(key):返回名称为key的hash中所有键 hvals(key):返回名称为key的hash中所有键对应的value hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value

  34. 参考资料 http://www.javaeye.com/topic/524977 http://liuxinglanyue.javaeye.com/blog/829202 http://192.168.0.5/cwiki/display/WEB/SCMQ http://baike.baidu.com/view/4595959.htm http://blog.haohtml.com/index.php/archives/6306 http://code.google.com/p/redis/wiki/PublishSubscribe http://jeffxie.blog.51cto.com/blog/1365360/292106

  35. 谢谢~~

More Related