redis 数据类型

  1. strings(字符串)
    a) 如果只使用 redis 中的字符串类型,且不使用 redis 的持久化功能,那么,redis 就和memcache 非常非常的像了;
    b) 在遇到数值操作时,会自动转换过为字符串,如写入数字1,读出来将是字符串1;
    c) 本身具有原子性的指令:incr、 decr 和 Memecached 中 increment、 decrement 类似;
    d) 应用场景:常规计数-微博数,粉丝数;
  2. lists(列表)
    alists 数据类型的实现不是数组而是通过链表这种数据结构实现;
    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名高分选手
    i.列出某用户当前的全球排名
  5. hashes(哈希)
    a) 在Memcached 中,我们经常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值,比如
    用户的昵称、年龄、性别、积分等,这时候在需要修改其中某一项时,通常需要将所有值取出反序列化后,修改某一项的值,
    再序列化存储回去。这样不仅增大了开销,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而
    Redis 的 Hash 结构可以使你像在数据库中 Update 一个属性一样只修改某一项属性值。
    b) 应用场景:存储部分变更数据,如用户信息,session 共享;
458