- 1、本文档共51页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Redis介绍及常用命令剖析
一 Redis介绍
?
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于 HYPERLINK /list/b/0205_1.shtml \o 内存 \t _blank 内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。
?
Redis能运行在大多数POSIX(Linux, *BSD, OS X 和Solaris等)系统上,官方没有支持Windows的版本。目前最新的版本是2.2.11,这个版本主要是修复了一个2.2.7版本中遍历方式优化带来的一个bug。
和普通的Key-Value结构不同,Redis的Key支持灵活的数据结构,除了strings,还有hashes、lists、 sets 和sorted sets等结构。正是这些灵活的数据结构,丰富了Redis的应用场景,能满足更多业务上的灵活存储需求。
Redis的数据都保存在 HYPERLINK /Memory/10734_1.html \o 内存 \t _blank 内存中,而且底层实现上是自己写了epoll event loop部分,而没有采用开源的libevent等通用框架,所以读写效率很高。为了实现数据的持久化,Redis支持定期刷新(可通过配置实现)或写日志的方式来保存数据到磁盘。
1、数据类型
作为Key-value型数据库,Redis也提供了键(Key)和键值(Value)的映射关系。但是,除了常规的数值或字符串,Redis的键值还可以是以下形式之一:
●Lists (列表)
●Sets (集合)
●Sorted sets (有序集合)
●Hashes (哈希表)
键值的数据类型决定了该键值支持的操作。Redis支持诸如列表、集合或有序集合的交集、并集、查集等高级原子操作;同时,如果键值的类型是普通数字,Redis则提供自增等原子操作。
2、持久化
通常,Redis将数据存储于 HYPERLINK /Memory/10734_1.html \o 内存 \t _blank 内存中,或被配置为使用虚拟内存。通过两种方式可以实现数据持久化:使用截图的方式,将内存中的数据不断写入磁盘;或使用类似MySQL的日志方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。
3、主从同步
Redis支持将数据同步到多台从库上,这种特性对提高读取性能非常有益。
4、性能
相比需要依赖磁盘记录每个更???的数据库,基于内存的特性无疑给Redis带来了非常优秀的性能。读写操作之间有显著的性能差异。
5、提供API的语言
●C
●C++
●C#
●Clojure
●Common Lisp
●Erlang
●Haskell
●Java
●Javascript
●Lua
●Objective-C
●Perl
●PHP
●Python
●Ruby
●Scala
●Go
●Tcl
?
6、适用场合
毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进 HYPERLINK /list/b/0732_1.shtml \o 冰箱 \t _blank 冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的 HYPERLINK /icebox/10734_1.html \o 冰箱 \t _blank 冰箱。希望你喜欢这个比喻。
下面是Redis适用的一些场景:
(1)、取最新N个数据的操作
比如典型的取你网站的最新文章,通过下面方式,我们可以将最新的5000条评论的ID放在Redis的List集合中,并将超出集合部分从数据库获取。
使用LPUSH ments命令,向list集合中插入数据
插入完成后再用LTRIM ments 0 5000命令使其永远只保存最近5000个ID
然后我们在客户端获取某一页评论时可以用下面的逻辑
FUNCTION get_latest_comments(start,num_items):id_list = redis.lrange(ments,start,start+num_items-1)IF id_list.length num_itemsid_list = SQL_DB(SELECT ... ORDER BY time LIMIT ...)ENDRETURN id_listEND
如果你还有不同的筛选维度,比如某个分类的最新N
文档评论(0)