redis体系结构
程序strings key-value 类型 ,value不仅是String,也可以是数字.使⽤strings 类型可以完全实现⽬前
Memcache 的功能,并且效率更⾼,还可以享受redis的定时持久化,操作⽇志及replication 等功能.
除了提供与 Memcache⼀样的get ,set,incr,decr 等操作外,redis还提供下⾯的操作
1.获取字符串的长度
2.往字符串append的内容
3.设置和获取字符串的⼀段内容
4.设置及获取字符串的某⼀位(bit)
5.批量设置⼀系列字符串的内容
Hashs
在Memcached 中,我们经常将⼀些结构化的信息打包成hanshmap,在客户端序列化之后存储为⼀个字符串
的值,⽐如⽤户的昵称,年龄,性别,积分等,这时候在需要修改其中某⼀项时,通常需要将所有值取出后反序列化后,
修改某⼀项的值,再序列化存储回去,这样不仅增⼤了开销,也不适⽤于⼀些可能并发操作的场合(⽐如两个并发操作都需要修改积分) redis的hash结构可以使你像在数据库中update⼀个属性⼀样只修改某⼀项的属性值
Lists
Lists 就是链表,相信略有数据结构知识的⼈都应该能理解其结构.使⽤Lists结构,我们可以轻松的实现
最新消息排⾏等功能.Lists的另⼀个应⽤就是消息队列,可以利⽤Lists的PUSH 操作,将任务存在Lists中,
然后⼯作线程再⽤POP 操作将任务取出进⾏执⾏.redis还提供了操作Lists中某⼀段的api,你可以直接查询,删除Lists中某⼀项元素
Sets
Sets就是⼀个集合,集合的概念之⼀就是⼀堆不重复的组合.利⽤redis提供的Sets 数据结构,可以存储⼀些集合性的数据,
⽐如在微博应⽤中,可以将⼀个⽤户所有的关注⼈存在⼀个集合中,将其所有粉丝存在⼀个集合中,还提供交集,并集,差集等操作
可以⾮常⽅便的实现如同关注,共同喜好,⼆度好友等功能,对上⾯的所有集合操作,你还可以使⽤不同的命令选择将结果返回给客户端还是存集到⼀个新的集合中
sorted sets
redis是nosql数据库吗和Set相⽐,sorted Sets 增加了⼀个权重参数score ,使得集合中的元素,能够按score进⾏有序排列,⽐如⼀个存储全班同学成绩sorted sets,其集合value 可以是同学的学号,⽽score就可以是其考试得分,这样在数据插⼊集合的时候,就已经进⾏了天然的排序,
另外还可以⽤Sorted Sets 来做带权重的队列,⽐如普通消息的score 为 1 ,重要消息的score 为 2,然后⼯作线程可以选择按score 的倒序来获取⼯作任务.让重要的任务优先执⾏
Pub/Sub
Pub/Sub从字⾯上理解就是发布(publish)与订阅(Subscribe),在redis中, 你可以设定对某⼀个key值
进⾏消息发布及消息订阅,当⼀个key值上进⾏了消息发布后,所有订阅它的客户端都会收到对应的消息,这⼀功能最明显的⽤法就是作实时消息系统,⽐如普通即时聊天,聊等功能
Transactions
谁说NoSQL都不⽀持事务,虽然redis的 Transactions提供的并不是严格的ACID 的事物
(⽐如⼀串⽤EXEC 提交执⾏的命令,在执⾏中服务器宕机,那么会有⼀部分执⾏了,剩下没执⾏)
但是这个Transactions 还是提供了基本的命令打包执⾏的功能(在服务器不出问题的情况下,可以保证⼀连串的命令是顺序在⼀起执⾏的,,中间会有其他客户端命令插进来执⾏)
redis还提供⼀个watch功能,你可以对⼀个key进⾏watch,然后再执⾏Transctions,在这过程中,
如果对这个watched的值进⾏了修改,那么这个Transactions会发现并拒绝执⾏
redis适⽤场合经典架构
应⽤程序直接访问redis数据库
应⽤程序直接访问redis,当redis访问失败访问磁盘数据库, ⽐如mysql关系型数据库
集功能
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论