redis笔记

什么是redis
redis是 C语言开发的开源的非关系型(NOSQL)的键值对数据库。它的键只能是string,值类型包括string,hash,list,set,zset等。它的数据保存在内存中,所以速度非常快,常用于分布式缓存。

redis的数据类型对应底层数据结构

redis的优缺点
优点:
速度快;
支持多种数据类型;
支持数据持久化;
支持事务,redis操作是原子性的,它还支持多个操作合并后的原子性操作;
支持主从复制,可以实现读写分离
缺点:
数据库容量受内存限制

redis为什么快
1.它完全基于内存
2.采用单线程,避免了线程间的上下文切换
3.数据结构简单,数据操作简单
4.使用多路I/O复用,非阻塞IO

redis是单线程还是多线程
redis是单线程的,但定期删除、数据持久化、主从同步都是由额外子线程执行的,6.0后还引入了多线程进行IO读写处理,但它执行命令的主线程还是单线程的。

redis的持久化机制
RDB:内存中的数据集以快照的形式保存到磁盘
AOF:将执行的每条写命令保存到文件中
优缺点:RDB的数据恢复速度更快;AOF数据不容易丢失,安全性更高
两种方式可以同时使用,既能方便数据的备份,也能确保数据的完整性

缓存雪崩,缓存击穿,缓存穿透
缓存雪崩:同一时间大面积key时效
处理办法:在批量往redis存数据时,加上个随机值
缓存击穿:一个非常热点数据失效,大并发访问直接落到数据库上
处理办法:非常热点的数据设置永不过期,或者获取数据的地方使用互斥锁
缓存穿透:是指用户发起大量请求获取一个在数据库和缓存中都不存在的值
处理办法:对请求数据进行校验,或者将此类数据也存入缓存

redis集群策略

  1. 主从模式
    • 建立连接:
      1:设置master的ip和port,保存master的信息
      2:建立socket连接
      3:定时发送ping
      4:身份验证
      5:发送slave的port在这里插入图片描述
    • 数据同步
      1:请求同步数据
      2:创建RDB文件
      3:恢复RDB文件
      4:请求部分同步数据
      5:恢复部分同步数据在这里插入图片描述
    • 命令传输
      1:发送offset
      2:接收slave的offset与本身的offset比较。
      不在缓冲区,则执行全量复制。
      在缓冲区发送本身offset和需要同步的数据。
      3:保存offset,恢复部分同步数据
      在这里插入图片描述
  2. 哨兵模式
    - 监控:不断检查master和slave的状态。
    - 通知:当监控到服务器出现异常,向其他哨兵和slave发送通知。
    - 故障转移:断开master与slave的连接,选取一个slave为新的master,并告知客户端服务器的地址
    [^1]: 有“主观下线”和“客观下线”两个概念
  3. 集群模式
    多个主从结构作为一个整体使用,即数据分散保存到多台master中,每个master只有一部分数据。

redis分布式锁的实现
使用redission.getLock()获取锁对象->.lock()执行锁操作->.isLock()判断锁是否存在->.isHoldByCurrentTread()判断是否自己的锁->.unlock()解锁
底层命令是SETNX

redis红锁
redis节点之间既没有主从,也没有集群关系。客户端用相同的key和随机值在redis节点上请求锁,请求锁的超时时间应小于锁自动释放时间。当在超过半数redis上请求到锁的时候,才算是真正获取到了锁。如果没有获取到锁,则把部分已锁的redis释放掉。

redis的过期删除策略
惰性删除:
定期删除:

redis的淘汰机制
noevicition:不淘汰,redis满了以后新的存入直接报错
allkeys-lru:对所有key,进行最近最少使用机制淘汰(使用时间远近)
allkeys-lfu:对所有key,进行最近最少使用次数机制淘汰(单位时间内使用次数的多少)
allkeys-random:对所有key,随机淘汰
volatile-lru:对设置了过期时间的key,进行最近最少使用机制淘汰(使用时间远近)
volatile-lfu:对设置了过期时间的key,进行最近最少使用次数机制淘汰(单位时间内使用次数的多少)
volatil-random:对设置了过期时间的key,随机淘汰
volatile-ttl:对设置了过期时间的key,最快要过期的进行淘汰

常用命令

  • string
    set:set key value
    get:get key
    del:del key
    mset:mset key1 value1 key2 value2……
    mget:mget key1 value1 key2 value2……
    strlrn:strlrn key
    append:append key value
    incr:incr key
    incrby:incrby key increment
    incrbyfloat:increbyfloat key increment
    decr:decr key
    decrby:decrby key increment
    setex:setex key seconds value
    psetex:psetex key milliseconds value

  • list

  • hash
    hset:hset key field value
    hget:hget key field
    hgetall:hgetall key
    hdel:hdel key field1 field2……
    hmhset:hmset key field1 value1 field2 value2……
    hmget:hmget key field1 filed2……
    hlen:hlen key
    hexists:hexists key field
    hkeys:
    hvals:
    hincrby:
    hincrbyfloat:

  • set

  • zset

注意事项

  • string
    数据最大存储量:512MB
    数据计算最大范围:long型最大值
  • hash
    每个hash可以存储2的32次方-1个键值对

常用配置

常用工具

redis瘫痪如何避免数据库压力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值