首页 > 数据库 >Redis 学习笔记

Redis 学习笔记

时间:2024-05-08 11:56:27浏览次数:28  
标签:缓存 Redis redis 笔记 学习 更新 key Hello

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+消息队列 https://blog.csdn.net/m0_66076989/article/details/136475259  

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

标签:缓存,Redis,redis,笔记,学习,更新,key,Hello
From: https://www.cnblogs.com/zendu/p/18179379

相关文章

  • redisearch 安装和使用
    方式一:源码编译安装(未成功)能找到的文档基本都是这一套,但是编译过程中会遇到各种坑,make版本,其他依赖问题,尝试解决无果。#--recursive选项递归下载子模块依赖gitclone--recursivehttps://github.com/RediSearch/RediSearch.gitmakesetupmakebuild#在redis.conf最后......
  • 【译】2024 年的机器遗忘/反学习
    来源:ai.stanford.edu/~kzliu/blog/unlearning由KenLiu∙May2024撰写▸目录1.反学习的历史和动机2.反学习的形式2.1.精确反学习2.2.通过差分隐私进行“反学习”2.3.已知示例空间下的经验性反学习2.4.未知示例空间下的经验性反学习2.5.只需要......
  • GO语言学习笔记
    导图:GO语言四大模块 1.调度器2.netpoll3.内存管理4.GC 垃圾回收算法有很多,主要有:引用计数、标记-清除、分代收集口述,gogc的原理三色标记发+混合写屏障思路尽量减少stw的时间,1.只在开始标记阶段和标记结束阶段使用stw,2.标记阶段采用写屏障,将新建和修改的放入单......
  • 【文化课学习笔记】【物理】功与能
    【物理】功与能功基础概念定义一个物体在力的作用下,沿力的方向,通过一段距离(位移),则称这个力做了功。公式功的定义式:\[W=Fx\]这里的\(x\)指的是物体沿力的方向上发生的位移。由于力\(F\)和位移\(x\)都是矢量,所以得到的功\(W\)是标量。注意:虽然\(W\)是标量,但是......
  • C#中Redis使用简单教程
    C#中Redis使用简单教程Curry30_chen已于2024-01-1013:54:25修改阅读量2.9k收藏16点赞数5文章标签:c#redis开发语言版权客户端redis-desktop-manager对Redis可视化管理工具客户端redis-desktop-manager对Redis可视化管理工具立即下载C#开发者的Redis入门指南Redis是......
  • 文件IO的学习
    IO编程概述了解FAT32和NTFS文件系统是操作系统用于明确磁盘或者分区上文件的方法和数据结构。一块硬盘就像一个块空地,文件就像不同的材料,我们首先得在空地上建起仓库(分区),并且指定好(格式化)仓库对材料的管理规范(文件系统),这样才能将材料运进仓库保管。文件系统是对应硬盘的分......
  • 原始翎风CLIENT8位 (11) fsata的学习
    本单元提供系统中的所有对话框显示MAINIMAGEFILE='Data\Prguse.wil';MAINIMAGEFILE2='Data\Prguse2.wil';MAINIMAGEFILE3='Data\Prguse3.wil';CHRSELIMAGEFILE='Data\ChrSel.wil';MINMAPIMAGEFILE='Data\mmap.wil......
  • 原始翎风CLIENT8位 (12) playscn的学习
    绘图关键的数据地图客户区,以主角的地图坐标为中心左右各9格,上下9,8格一切以主角为中心进行计算,换算。Map.m_ClientRectLeft:=g_MySelf.m_nRx-9;Top:=g_MySelf.m_nRy-9;Right:=g_MySelf.m_nRx+9;Bottom:=g_MySelf.m_nRy+8; 地图地面绘图m_MapSurface的像素大小......
  • 原始翎风CLIENT8位 (10) tscenc的学习
    IntroScn.pas嗟夫DELPHI输入法相关知识凡是窗口类都有TImeMode这是个集合其中包含有:TImeMode=(imDisable,imClose,imOpen,imDontCare,imSAlpha,imAlpha,imHira,imSKata,imKata,imChinese,imSHanguel,imHanguel);指定imDisable的话IME变得无效。既无法作使......
  • 原始翎风CLIENT8位 (13) actor的学习
    functionGetOffset(appr:integer):integer偏移大于1000退出nrace:=apprdiv10nrace0-90npos:=apprmod10npos0-9这个找的是怪物图片在文件中图片索引偏移量分为很多种,有偏移280,280是一个怪物的一组图片,例如MON1有偏移230,例如MON2有偏移360的,例如MON3appr应该......