Redis

Redis

  1. 什么是Redis
    Redis是一个用C语言开发的数据库,不过它是运行在内存上的,所以读写很快。在我自己的项目,只使用了Redis做缓存,但是没有使用它的其他功能。

  2. 其实分布式缓存的可选方案除了Redis还有Memcached。还是说需要对这个有一些了解的。文化软实力。简单说一下两者的区别。
    共同点:
    1. 都是基于内存的数据库。都被常用于缓存。
    2. 都有过期策略
    3. 效率都比较高
    不同点:
    1. Redis支持的数据类型更多(string,set,zset,list,hash,bimap,geograph)
    2. Redis是支持数据持久化的,而Memchache不支持
    3. Redis有灾难恢复机制
    4. Memcache是多线程。而Redis是单线程的多路服用IO模式(这个Point

  3. Redis的应用场景

    1. 分布式锁
    2. 消息队列
    3. 缓存
  4. 数据类型

    1. String

      1. set key value
      2. get key
      3. exists
      4. strlen
      5. del
    2. list

      1. rpush
      2. lpop
      3. lrange
    3. hash

      1. hmset userInfoKey key value keyvalue
      2. hget userInfokey name
      3. hget userInfoKey age
      4. hvals
      5. hkeys
    4. set 这个类似于Java中的HashSet。Redis中的set是一个无序集合

      1. 通过set可以查询到一个元素是否在这个集合中。
      2. sadd mySet value value2
      3. smembers mySet 查看set中的所有元素
      4. scard mySet 查看set的长度
      5. sismember 检查某一个元素是否存在在这个元素中
      6. sinterstore myset3 myset myset2查询myset和myset3中的元素放在myset3中
    5. zset有序的set,通过一个score进行有序排列

      1. zadd myZset 30. value
      2. zadd myZset 2.0 value2 1.0 value3
        就是进入zset的元素,自带一个权重,通过比较这个权重来计算这个元素在队列中的位置
    6. bitmap

      1. bitmap存储的是连续的二进制数字。通过bitmap只需要一个bit就可以表示某一个元素的状态,key就是对应元素本身。比较节省空间
      2. setbit mykey 7 1
      3. setbit mykey 7 0
      4. getbit mykey 7
      5. setbit mykey 6 1
      6. setbit mykey 8 1
      7. bitCount 返回一个制定的key中位的值为1的个数
      8. 使用场景一:用户行为分析,很多网站为了分析你的喜欢,需要研究你点赞过的内容
        setbit beauty_girl_001 uid 1
      9. 使用场景二:统计活跃用户,用时间为key用户id为offset,如果当日活跃过就设置为1
  5. Redis的底层数据结构以及实现

    1. Redis底层的数结构
      1. 简单动态字符串
      2. 链表
      3. 字典
      4. 跳表
      5. 整数集合
      6. 压缩列表
    2. 字符串底层使用SDS简单动态字符串。好处是动态扩展
    3. 列表
      1. 数据量小的时候ziplist,压缩表是一块连续的存储空间,每一个节点有一个属性存储前一个节点的长度。
      2. 数据量多的时候会转换成链表LinkedList.
    4. 哈希
      1. 压缩列表ziplist(数据量小的时候)
      2. hashtable(底层用字典实现)
    5. 集合(set)
      1. intset,集合保存的对象都是整数,或者集合数据量比较小的时候
      2. hashtable,保存的不都是整数,或者数据量比较大的时候使用set
    6. 有序集合(zset)
      1. 数据量小的是压缩列表ziplist
      2. 数据量大的时候使用skiplist跳表完成
  6. Redis的单线程模型
    Redis既然是单线程模式,那么是如何监听大量客户端的连接的,那就是通过IO多路服用技术。将引起Redis注意的事情注册到内核。观察他有没有被发生过。

  7. 布隆过滤器是,判断一个给定的数据是否存在于海量数据中的一个数据结构。

  8. 缓存雪崩指的是,一瞬间缓存大量失效,这样真是数据库就面临巨大的压力。比如过期时间设置不恰当就会造成这个问题。

  9. Redis的内存淘汰机制
    1. allkeys-lru 当内存不够的时候移除最近最少使用的key
    2. volatile-lru 设置过期时间数据集,挑选最近最少使用的
    3. volatile-random 从过期时间数据集中随机挑选淘汰
    4. volatile-ttl 从设置了过期时间的数据集中挑选即将过期的淘汰
    5. allkeys-random 随机淘汰
    6. no-eviction禁止淘汰

  10. Redis设置了两种数据持久化的方式
    1. RDB是在制定时间间隔内生成数据集的时间点快照。因为记录的是整个数据的样子,所以耗时长,如果当做备份还行,如果做容灾备份就很难受。
    2. AOF是持久化记录服务器执行所有写操作的命令。都是写在末尾的,所以比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值