redis初探(上) | 青训营笔记

56 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天

介绍

内存数据库,高读写性能的key-value存储系统。可作为缓存,消息中间件,流数据处理。

Redis is an open source (BSD licensed), in-memory data structure store used as a database, cache, message broker, and streaming engine

重要特性:

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s

  • 原子 – Redis的所有操作都是原子性的。单个操作是原子性的。

    多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起

  • 数据结构丰富

  • 扩展

扩展:

  • Transactions 事务
  • Pub/Sub 消息的发布订阅机制
  • Lua scripting
  • Keys with a limited time-to-live 键过期机制
  • LRU eviction of keys
  • Automatic failover 故障转移

数据结构

Key、Strings、Hash、List、Set

  • GET/SET/DEL/INCR/SETNX

    (变量

    获得,设置,删除,原子增,只在不存在时设置,存在的话不作为(SET if Not eXists)

    EXITS Key,判断是否存在

    Expire Key time,设置过期时间

    TTL Key, 测试时间

  • HSET/HGET/HINCRBY

    (哈希表 or 字典 or 映射Map

    (插入一个 k,v;获取一个k,为一个k增加值

    HSET key field value [field value ...]
    HGET key field
    HINCRBY key field increment
    
  • LPUSH/RPOP/LRANGE

    (list / 链表

    头插,尾弹

    LRANGE key start stop
    

    用负数表示尾部,类似python切片的语法,全闭区间

  • SADD / SISMEMBER / SCARD / SINTER

    (集合,集合间操作

  • ZADD/ZRANGEBYSCORE/ZREVRANGE/ZINCRBY/ZSCORE

    (有序集合

    doc

应用

缓存穿透

对于一个cache中不存在的key,请求会直接询问数据库DB,如果短时间对这个不存在的key大量并发访问,就会造成DB宕机

解决

  • bloom filter,进行拦截
  • cache null策略,设置一个 承接空 的key

缓存雪崩

在同一时刻,大量缓存的Key失效,导致原本由缓存承接的请求,大量的查询DB,会造成DB宕机

解决

  • 请求加锁
  • 对失效更新
  • 不同key,设置不同的失效时间

未来

写的比较浅,未来会深入学习,并结合实践