Redis的五种数据类型
操作方法
- 01
1.strings(字符串) a)如果只使用redis中的字符串类型,且不使用redis的持久化功能,那么,redis就和memcache非常非常的像了; b)在遇到数值操作时,会自动转换过为字符串,如写入数字1,读出来将是字符串1; c)本身具有原子性的指令:incr、decr和Memecached中increment、decrement类似; d)应用场景:常规计数-微博数,粉丝数; 2.lists(列表) a)lists数据类型的实现不是数组而是通过链表这种数据结构实现; b)使用Lists结构,我们可以轻松地实现最新消息排行等功能。Lists的另一个应用就是消息队列,可以利用Lists的PUSH操作,将任务存在Lists中,然后工作线程再用POP操作将任务取出进行执行; c)每个子元素都是String类型的双向链表,可以通过push和pop操作从列表的头部或者尾部添加或者删除元素,这样List即可以作为栈,也可以作为队列; 3.sets(无序集合) a)所谓集合就是一堆不重复值的组合,并且是没有顺序的; b)在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。 4.sorted sets(有序集合) a)和Sets相比,Sorted Sets增加了一个权重参数score,使得集合中的元素能够按score进行有序排列; b)比如一个存储全班同学成绩的Sorted Sets,其集合value可以是同学的学号,而score就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。可以用Sorted Sets来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。 c)应用场景:在线游戏的排行榜,根据得分你通常想要: i.列出前100名高分选手 ii.列出某用户当前的全球排名 5.hashes(哈希) a)在Memcached中,我们经常将一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值,比如用户的昵称、年龄、性别、积分等,这时候在需要修改其中某一项时,通常需要将所有值取出反序列化后,修改某一项的值,再序列化存储回去。这样不仅增大了开销,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而Redis的Hash结构可以使你像在数据库中Update一个属性一样只修改某一项属性值。 b)应用场景:存储部分变更数据,如用户信息,session共享;