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!”


  • 相关阅读:
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1131 Subway Map (30 分)
    PAT 甲级 1131 Subway Map (30 分)
    AcWing 906. 区间分组 区间贪心
    AcWing 907. 区间覆盖 区间贪心
  • 原文地址:https://www.cnblogs.com/simonote/p/3099078.html
Copyright © 2011-2022 走看看