zoukankan      html  css  js  c++  java
  • the little redis 阅读笔记

    1. redis不是一个通用的数据解决方案,它只是擅长于处理某些特定的问题集合,而这些问题是我们经常关心的一类问题。
    2. redis是一个全内存的kv存储工具,它会定期将数据持久化到硬盘。然而它不仅仅是一个kv存储,它拥有五种数据结构,只是其中的一种是kv结构。
    3. 类似的,我们可以认为关系数据库是只拥有一种数据结构的存储工具,这种数据结构就是表,关系数据库用表这一种结构满足了各种的数据需求,即one-size-fits-all,而redis是用五种典型的数据结构处理特定类型的问题,这种设计使得redis简单而快速。
    4. redis用key标识一条数据,而用value存储key对应的数据,通常情况下,redis都将value视为字节数组,而不关心它们到底是什么样的数据。因为,redis不支持value内部的查询,因此,它不需要理解value到底是什么,value可以是任何类型。
    5. string类型经常用于缓存数据。
    6. hash用于组织数据,方便查询。
    7. list适合用于存储引用reference,或者轨迹track。
    8. set适合用于标记value的其它属性,或者满足集合相关操作,交并等。
    9. sort set 适用于按整数排序的应用。
    10. 时间复杂度
    O(1) sismember..
    O(logN) zadd..
    O(N) ltrim..
    O(logN+M) zremrangebyscore..
    O(N+M*logM) sort, 这是redis最复杂的命令,
    11. 多key查询
    通过mail或id来查询user,
    1)不可取的方法:
    set users:leto@dune.gov ”{id: 9001, email: ’leto@dune.gov’, ...}”
    set users:9001 ”{id: 9001, email: ’leto@dune.gov’, ...}”
    2)合理的方法:
    set users:9001 ”{id: 9001, email: leto@dune.gov, ...}”
    hset users:lookup:email leto@dune.gov 9001
    12. 关联和索引
    1) 通过list,set
    13. pipeline
    在redis中,操作的数据对象是每个key,因此容易造成频繁访问redis。通常情况下,客户端向redis发送请求,将等待直到收到redis的回复,然后才开始发送下一条请求。而通过pipeline可以一次性发送多条请求,这样节省了网络开支,提供了效率。
    14. 事务
    redis是单线程的,因此每一条命令都是原子。对于多条命令可以通过事务实现元原子性。
    multi
    hincrby groups:1percent balance -9000000000
    hincrby groups:99percent balance 9000000000
    exec
    15. keys
    keys支持模式匹配,它可以方便的找到左右匹配成功的key。但是keys命令不应该用在最终的产品发布代码中,因为它是对所有的key做线性扫描。
    例子:设计一个bug跟踪服务,key设计为bug:account:bug_id。如果你要找出一个账户下面的所有bug进行操作,
    不应该使用命令 keys bug:1233:*;
    而更好的解决方案是采用hash组织数据,
    hset bugs:1233 1 ”{id:1, account: 1233, subject: ’...’}”
    hset bugs:1233 2 ”{id:2, account: 1233, subject: ’...’}”
    如此可以通过 hkeys bugs:1233获取1233账户下的所有bugid,通过hdel bugs:1233 2删除指定的bug。
    16. sort
    redis的sort命令的最强大之处是它可以按照关联对象的值进行排序,关联对象可以是string,也可以是hash。
    sort watch:leto by bug:*->priority get bug:*->details get #
    17. publish/subscribe
    client1:
        subscribe warnings
    client2:
        publish warnings ”it’s over 9000!”


  • 相关阅读:
    java集合归纳
    判断回文数
    29:四则运算计算表达式的值
    getOutString 输出弹出字符串
    两个字符串中不同元素的个数
    字符串各个字符ASCII值加5
    23:一个整数的二进制表示中有多少个1
    Java进程间通信
    转 双重检查锁定与延迟初始化
    Key-Value键值存储原理初识(NOSQL)
  • 原文地址:https://www.cnblogs.com/simonote/p/3099078.html
Copyright © 2011-2022 走看看