美文网首页
Redis笔记

Redis笔记

作者: 小川川_7827 | 来源:发表于2020-11-22 11:36 被阅读0次

    首先,从宏观上说,redis是一个完全免费开源,由C语言编写的,单线程(处理网络请求)、高性能基于键值对的内存数据库,支持持久化的nosql

    功能

    做缓存,但不仅仅只能做缓存,还可以做分布式锁,队列,会话缓存,点赞,统计访问量功能,利用redis计数器做分布式唯一主键

    持久化

    rdb

    bgsave会fork一个子进程去执行持久化

    save在主进程进行持久化

    直接以数据形式存储到dump.rdb文件

    bind配置本机ip用于监听,如果是阿里云,建议设置为私网ip

    设置了bind或者密码,保护模式不生效

    主从复制时,不能关闭rdb持久化

    aof

    由于rdb定时执行,因此会丢失执行周期的数据

    aof是基于日志追加的模式进行持久化,everysec,no,always

    BGREWRITEAOF重写会fork子进程,会按照rdb形式存储数据,可以通过配置自动触发

    数据结构

    string,list,set,hash,zset

    集群

    一共有16384个槽位

    redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1 -a 123456

    redis-cli -h 127.0.0.1 -p 7000 -a 123456 cluster nodes

    红锁及其思想

    缓存穿透

    数据库没有,缓存中也没有,就会造成缓存穿透

    可以存储空值,但是容易被黑客利用进而存储大量无用数据

    可以使用布隆过滤器bloomFilter,由谷歌提供,误判率与数组长度和哈希函数个数有关

    但是bloomFilter不支持分布式,占用内存且重启会丢失

    解决方案:可以利用bitmap与bloomFilter结合最佳实践,但是维护比较麻烦,新增时要更新并且不能删除,要定时更新

    缓存击穿

    数据刚好失效时,恰好并发访问这条数据

    解决方案:使用分布式锁

    缓存雪崩

    大部分数据失效就是缓存雪崩

    解决方案是搭建高可用集群,将过期时间错开

    分布式锁

    使用setnx key value并加过期时间

    redis事务

    multi->exec/discard配合watch使用

    语法错误全部回滚,执行错误部分回滚

    redis发布订阅

    简化版的消息队列

    删除策略

    redis有三种删除策略

    惰性删除:在查看时删除过期数据

    定时删除:占用CPU

    定期删除:是惰性和定时的折中方案

    如果没有设置过期时间,但是内存满了,就要用到淘汰策略

    淘汰策略(逐出算法)

    一共八种策略

    noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。默认配置

    allkeys-lru:在主键空间中,优先移除最近未使用的key。

    volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。

    allkeys-lfu:在主键空间中,优先移除最近使用次数最少的数据

    volatile-lfu:在设置了过期时间的键空间中,挑选最近使用次数最少的数据

    allkeys-random:在主键空间中,随机移除某个key。

    volatile-random:在设置了过期时间的键空间中,随机移除某个key。

    volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的key优先移除。

    volatile-* 系列指令在无键值满足条件时(例如未设置过期时间),表现为 noeviction

    相关文章

      网友评论

          本文标题:Redis笔记

          本文链接:https://www.haomeiwen.com/subject/tcvzuktx.html