• redis笔记


    什么是redis?

    是一个使用 C 语言编写的,键值对数据库。 Redis 的数据是存在内存中的,所以读写速度非常快。

    redis有哪些优缺点?

    优:读写性能优异,数据持久化(RDB,AOF),数据类型丰富(string,hash,list),支持主从复制

    缺:受物理内存限制,不具备自动容错和恢复功能。

    Redis的应用场景有哪些?

    缓存:频繁被访问的数据。排行榜:用sortSet(有序集合)。消息队列:邮件发送

    redis为什么快?

    完全基于内存、数据结构简答、单线程避免了上下文切换

    缓存不一致怎么办?

    先删除缓存,再更新数据库。如果数据库更新失败了,那么数据库中是旧数据,缓存中是空的,那么 数据不会不一致。因为读的时候缓存没有,所以去读了数据库中的旧数据,然后更新到缓存中。

    redis的缓存使用会出现什么问题,对应解决方案有什么?

    缓存穿透:查询数据库里不存在的数据。缓存空值

    缓存雪崩:某一时间段缓存集中失效。热点数据不过期,不同的过期时间

    缓存击穿:频繁访问热点数据,失效时就落到了数据库。不过期

    redis持久化方式?

    RDB:对内存中数据库的状态进行快照。AOF:以追加的形式把redis的命令写入文件

    两种持久化优缺点

    RDB:用单独子进程来进行持久化不会 IO 操作,保证了 redis 的高性能。可能会丢失数据

    AOF(appendonly):更完整的保存数据。Aof文件大恢复速度慢

    redis如何实现ACID?

    redis 可以实现原子性,一致性,隔离性。但是不能保证持久性。

    原子性,multi会先把命令放到队列里面,然后exec执行命令。发生错误,redis不支持事务回滚

    一致性, RDB/AOF。

    隔离性,单线程上执行事务,并串行执行事务。watch机制。

    持久性,AOF模式下,aof选项设置为always才有持久性。

    缓存的常见删除策略有哪些?

    定期删除(隔一段时间进行检查)惰性删除(不用管,请求时判断)

    redis的内存淘汰策略是什么?(内存)

    不允许写入(默认),移除最少使用的,快过期的数据任意移除,快过期的数据挑选移除,任意淘汰

    LRU=缓存置换

    如果一个数据在最近一段时间没有被用到,那么将来被使用到的可能性也很小,所以就可以被淘汰掉。

    Redis命令

    字符串   set设置    get获取

    哈希 hmset设置 hgetall获取

    列表 lpush设置 lrange获取

    集合 sadd设置 smembers获取

    有序集合 zadd设置 zrange获取

    Auth 检查密码是否正确

    Ping 查看服务是否运行

    Quit关闭连接

    事务

    Watch监听,事务执行前发生改变就不继续了

    批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

    Multi开始事务

    Exec触发事务

    Discrad取消事务

    分布式锁特性的实现?

    「互斥性」: 任意时刻,只有一个客户端能持有锁。

    「锁超时释放」:持有锁超时,可以释放,防止不必要的资源浪费,也可以防止死锁。

    「可重入性」:一个线程如果获取了锁之后,可以再次对其请求加锁。

    「高性能和高可用」:加锁和解锁需要开销尽可能低,同时也要保证高可用,避免分布式锁失效。

    「安全性」:锁只能被持有的客户端删除,不能被其他客户端删除

    实现:SETNX + EXPIRE

  • 相关阅读:
    CIE A-level经济加权分算法
    配置DHCP服务器
    python之模拟登录与表单交互
    Windows Docker Desktop安装K8S
    npm install卡在sill idealTree buildDeps没有反应,安装失灵
    Qt 使用CMake 生成 ocx 问题记录
    操作系统日志收集与分析
    数字化门店| 美业/医美门店管理系统 | 医美小程序
    mac控制台命令小技巧
    ElasticSearch (一)ElasticSearch 入门简介
  • 原文地址:https://blog.csdn.net/qq_41564405/article/details/126322648