Redis 学习笔记

1.redis 基本数据结构

Redis 基础数据结构包括:

    1. 字符串(String)  简单动态字符串

    2. 列表(List)         

      压缩列表

      快速链表

    3. 集合(Set)       

      整型数组
      字典哈希表
    4. 有序集合(Sorted Set,或称为 ZSet)

      压缩列表
      跳表
    5. 哈希(Hash)

      压缩列表

      字典哈希表

    6. 位图(Bitmap)

      7.超日志(HyperLogLog)

基本操作:

# 字符串
SET mykey "Hello"
GET mykey
# 列表
LPUSH mylist "Hello"
LRANGE mylist 0 -1
# 集合
SADD myset "Hello"
SMEMBERS myset
# 有序集合
ZADD myzset 1 "Hello"
ZRANGE myzset 0 -1 WITHSCORES
# 哈希
HSET myhash field1 "Hello"
HGETALL myhash
# 位图
SETBIT mybitmap 0 1
GET mybitmap
# 超日志
PFADD myhyperloglog "Hello"
PFCOUNT myhyperloglog

2.如何解决双写(写缓存和写数据库)时的缓存的一致性问题?

 

只考虑更新类,我们分析一下几种解决方案,

1、先更新缓存,再更新数据库

不考虑,容易出现缓存更新成功,但是数据库更新失败了的问题

2、先更新数据库,再更新缓存 ,对缓存命中率要求很高时推荐这个方案

问题:1.并发更新导致缓存不一致
0
 
2 .数据库更新成功了,但是缓存更新失败了也有问题, 重试机制,消费队列MQ持久化加成功删除
3. 频繁的更新缓存,浪费性能
更新缓存代价大时倾向于下面两种方案

3、先删除缓存,后更新数据库

读发现没有,去数据库中读到旧值更新到了缓存上,导致存在旧值问题。
0
0
休眠时间取决于读逻辑的耗时

4、先更新数据库,后删除缓存

缓存一开始没有的话,读操作比写操作快,写操作后会删掉读的旧值 (写比读慢的几率太小,同时可以增加过期时间) 推荐:读操作更新缓存时加上setnx 命令,保证读的数据不会覆盖写的数据,解决读写并发问题
缓存一开始有,写完直接删掉就可以了
问题:删除缓存失败的问题,可以采用mq
分布式锁解决多写问题,同时只有一个写请求
企业级做法,订阅binlog+消息队列
 

3.缓存常见问题,击穿,穿透,雪崩

  

 

 

 

4.redis 常见的性能优化,解决主的性能问题

 

5.redis 的常用场景

 

 

6.redis bigKey

热点数据不要有bigkey,拆表解决
使用redis自带的命令识别
例如可以使用Redis官方客户端redis-cli加上--bigkeys参数,可以找到某个实例5种数据类型(String、hash、list、set、zset)的最大key。
    优点是可以在线扫描,不阻塞服务;缺点是信息较少,内容不够精确。
监控redis内存指标等
 
解决思路:拆分通过get不同的key或者使用mget批量获取。
也就是对于String数据结构的话,减少存储的字符串的长度;  比如一个key存了所有玩家数据拆成每个玩家一个key
对于List、Hash、Set、ZSet数据结构则是减少集合中元素的个数。
 
定期清理失效数据,压缩等

 7.其它

redis 优点

高性能降低了访问延迟
高并发 提高了并发量

redis 缺点

双写缓存不一致
雪崩
穿透
并发竞争

redis 线程模型

单线程利用io多路服用,
可以同时处理多个链接
每个操作,操作内存速度快

redis key过期策略

惰性过期 下次访问时判断过期,过期删
定期过期 指定扫描间隔个耗时

   redis 主从,哨兵(有选主功能的主从),集群

  pika对应的优化?

    Pika 力求在完全兼容 Redis 协议、 继承 Redis 便捷运维设计的前提下, 通过持久化存储的方式解决 Redis 在大容量场景下的问题。相比于 Redis 的内存存储方式,Pika 支持百 GB 的数据量级,能极大减少服务器资源占用,增强数据的可靠性
  • 分布式锁 基于缓存

Redis 分布式锁常用命令如下所示:
    • SETNX key val:仅当key不存在时,设置一个 key 为 value 的字符串,返回1;若 key 存在,设置失败,返回 0;
    • Expire key timeout:为 key 设置一个超时时间,以 second 秒为单位,超过这个时间锁会自动释放,避免死锁;
    • DEL key:删除 key。

redis 如何解决key冲突问题

0
 
0
0
 
 
名词解释
RDB(Redis DataBase) 快照 和 AOF(Append Only File) 日志
 
热数据 访问频率比较高的数据
冷数据,访问频率比较低的数据
 
0

posted on 2024-05-08 11:48  zyz913614263  阅读(7)  评论(0编辑  收藏  举报

导航