Redis
文章平均质量分 91
系列笔记基于Redis6.0
小成同学_
This is your lucky day.
展开
-
Redis原理篇—内存回收
内存过期策略-过期key处理Redis 之所以性能强,最主要的原因就是基于内存存储。然而单节点的 Redis 其内存大小不宜过大,会影响持久化或主从同步性能。我们可以通过修改配置文件来设置 Redis 的最大内存当内存使用达到上限时,就无法存储更多数据了。为了解决这个问题,Redis 提供了一些策略实现内存回收:内存过期策略内存淘汰策略在学习 Redis 缓存的时候我们说过,可以通过 expire 命令给 Redis 的 key 设置 TTL(存活时间)可以发现,当 key 的 TTL原创 2022-12-27 10:37:25 · 869 阅读 · 0 评论 -
Redis原理篇—通信协议
RESP协议Redis 是一个 CS 架构的软件,通信一般分两步(不包括 pipeline 和 PubSub):客户端(client)向服务端(server)发送一条命令服务端解析并执行命令,返回响应结果给客户端因此客户端发送命令的格式、服务端响应结果的格式必须有一个规范,这个规范就是通信协议。而在 Redis 中采用的是 RESP(Redis Serialization Protocol)协议:Redis 1.2 版本引入了 RESP 协议Redis 2.0 版本中成为与 Redis原创 2022-12-26 12:33:52 · 618 阅读 · 0 评论 -
Redis原理篇—网络模型
用户空间和内核态空间服务器大多都采用 Linux 系统,这里我们以 Linux 为例来讲解:ubuntu 和 Centos 都是 Linux 的发行版,发行版可以看成对 Linux 包了一层壳,任何 Linux 发行版,其系统内核都是 Linux。我们的应用都需要通过 Linux 内核与硬件交互。用户的应用,比如 redis,mysql 等其实是没有办法去执行访问我们操作系统的硬件的,所以我们可以通过发行版的这个壳子去访问内核,再通过内核去访问计算机硬件。计算机硬件包括,如 cpu,内存,网卡等等原创 2022-12-25 12:55:14 · 1155 阅读 · 1 评论 -
Redis原理篇—数据结构
底层数据结构动态字符串SDS我们都知道 Redis 中保存的 Key 是字符串,value 往往是字符串或者字符串的集合。可见字符串是 Redis 中最常用的一种数据结构。不过 Redis 没有直接使用C语言中的字符串,因为C语言字符串存在很多问题:获取字符串长度的需要通过运算非二进制安全不可修改Redis 构建了一种新的字符串结构,称为简单动态字符串(Simple Dynamic String),简称 SDS。例如,我们执行命令:那么 Redis 将在底层创建两个 SDS,其中一个是包含原创 2022-12-24 15:45:51 · 820 阅读 · 0 评论 -
Redis高级篇之最佳实践
Key 的最佳实践[业务名]:[数据名]:[id]足够简短:不超过 44 字节不包含特殊字符Value 的最佳实践:合理的拆分数据,拒绝 BigKey选择合适数据结构Hash 结构的 entry 数量不要超过 1000(默认是 500,如果达到上限则底层会使用哈希表而不是 ZipList,内存占用较多)设置合理的超时时间批量处理的方案:原生的 M 操作Pipeline 批处理注意事项:批处理时不建议一次携带太多命令。Pipeline 的多个命令之间不具备原子性。原创 2022-12-23 11:59:32 · 946 阅读 · 0 评论 -
「Redis」10 三大缓存问题、分布式锁
1. 三大缓存缓存穿透问题描述key 对应的数据在数据源并不存在,每次针对此 key 的请求从缓存获取不到,请求都会压到数据源,从而可能压垮数据源。比如用一个不存在的用户 id 获取用户信息,不论缓存还是数据库都没有,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空。这样请求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题。若黑客利用此漏洞进行攻击可能压垮数据库。通俗理解指查询一个不存在的key,但是 redis 没有将 null 值写入缓存,导致所有的请求全去查询数据库,大量请求进原创 2022-12-09 11:50:22 · 567 阅读 · 0 评论 -
「Redis」09 集群
1. 概述问题容量不够,redis 如何进行扩容?并发写操作,redis 如何分摊?主从模式,薪火相传模式,主机宕机,导致 ip 地址发生变化,应用程序中配置需要修改对应的主机地址、端口等信息。解决方法代理主机(之前)无中心化集群配置(redis3.0)任何一台服务器都可以作为集群的入口,它们之间可以互相连通。什么是集群Redis 集群实现了对 Redis 的水平扩容,即启动 N 个 Redis 节点,将整个数据库分布存储在这 N 个节点中,每个节点存储总数据的 1/N 。原创 2022-12-08 10:39:27 · 115 阅读 · 0 评论 -
「Redis」08 主从复制
主机数据更新后根据配置和策略, 自动同步到备机的机制,Master以写为主,Slaver以读为主。主从复制的好处读写分离,性能扩展容灾快速恢复反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。Sentinel哨兵主要用来监控redis主从集群,提高了redis主从集群的可用性。哨兵机制解决了主从复制架构中的主节点宕掉后从节点无法作为主节点对外服务的问题Sentinel(哨兵)是Redis的高可用性解决方案:由一个或多个Sentinel实例 组成的。原创 2022-12-07 11:39:39 · 531 阅读 · 0 评论 -
「Redis」07 持久化操作(RDB、AOF)
以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,Redis启动之初会读取该文件重新构建数据,换言之,如果Redis重启就会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。AOF持久化流程客户端的请求写命令会被append追加到AOF缓冲区内;AOF缓冲区根据AOF持久化策略将操作sync同步到磁盘的AOF文件中;AOF文件大小超过重写策略或手动重写时,会对AOF文件Rewrite重写,压缩AOF文件容量;原创 2022-12-06 10:26:19 · 656 阅读 · 2 评论 -
「Redis」06 事务与锁机制
1. Redis的事务定义Redis 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。注意:Redis 的事务与 MySQL 的事务不同Redis 事务的主要作用就是串联多个命令防止别的命令插队。2. 事务基本命令 (Multi、Exec、Discard)从输入 Multi 命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入 Exec 后,Redis 会将之前的命令队列中的命令依次执行。组队的过程中可以原创 2022-12-05 11:51:24 · 241 阅读 · 0 评论 -
「Redis」05 Jedis操作Redis
即通过 Java 操作 Redis。1. Jedis基本操作Ⅰ. 测试连接连接Redis注意事项禁用Linux的防火墙:Linux(CentOS7)里执行命令:systemctl stop/disable firewalld.serviceredis.conf中注释掉bind 127.0.0.1,然后 protected-mode no引入依赖测试连接如果Redis安装在云服务器中,注意配置服务器的防护墙安全组。控制台打印:PONG说明连接成功。Ⅱ. 操作 RedisKey原创 2022-12-04 12:02:37 · 429 阅读 · 0 评论 -
「Redis」04 发布和订阅
Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis客户端可以订阅任意数量的频道。客户端可以订阅频道当给这个频道发布消息后,消息就会发送给订阅的客户端。发布订阅命令行实现打开一个客户端订阅 channel1SUBSCRIBE channel1打开另一个客户端,给 channel1 发布消息 hellopublish channel1 hello返回的 1 是订阅者数量。打开第一个客户端可以看到发送的消息注:发布的消息没有持久原创 2022-12-03 13:39:12 · 657 阅读 · 0 评论 -
「Redis」03 配置文件详解
Units单位配置大小单位,开头定义了一些基本的度量单位,只支持 bytes,不支持 bit。大小写不敏感。INCLUDES包含多实例的情况可以把公用的配置文件提取出来。类似 jsp 中的 includeNETWORK网络相关配置Ⅰ. bind默认情况 bind=127.0.0.1 只能接受本机的访问请求。不写的情况下,无限制接受任何 ip 地址的访问。生产环境肯定要写你应用服务器的地址,服务器是需要远程访问的,所以需要将其注释掉。如果开启了protected-mode,那么在原创 2022-12-02 09:48:21 · 200 阅读 · 0 评论 -
「Redis」02 Redis中的数据类型(含Redis6.0:Bitmaps、HyperLogLog、Geospatial)
键 (key) 操作keys *:查看当前库所有 keyexists key:判断某个 key 是否存在type key:查看你的 key 是什么类型del key :删除指定的 key 数据unlink key:根据 value 选择非阻塞删除,仅将 keys 从 keyspace 元数据中删除,真正的删除会在后续异步操作expire key 10 :为给定的 key 设置过期时间ttl key:查看还有多少秒过期, 表示永不过期, 表示已过期select:命令切换数据库dbsize:查原创 2022-12-01 12:20:09 · 413 阅读 · 0 评论 -
「Redis」01 NoSQL及Redis概述
1. NoSQL数据库Ⅰ. NoSQL数据库概述NoSQL (NoSQL = Not Only SQL),意即 “不仅仅是SQL”,泛指非关系型的数据库。 NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。不遵循SQL标准不支持ACID远超于SQL的性能NoSQL适用场景对数据高并发的读写海量数据的读写对数据高可扩展性的NoSQL不适用场景需要事务支持基于sql的结构化查询存储,处理复杂的关系,需要即席查询原创 2022-11-30 13:08:07 · 376 阅读 · 0 评论 -
Redis高端面试——三大缓存、分布式锁
Redis高端面试——三大缓存、分布式锁部分内容参考博主shwsh博客 Redis。缓存的概念什么是缓存?广义的缓存就是在第一次加载某些可能会复用数据的时候,在加载数据的同时,将数据放到一个指定的地点做保存。再下次加载的时候,从这个指定地点去取数据。这里加缓存是有一个前提的,就是从这个地方取数据,比从数据源取数据要快的多。java狭义一些的缓存,主要是指三大类虚拟机缓存(ehcache,JBoss Cache)分布式缓存(redis,memcache)数据库缓存正常来说,速原创 2021-09-30 12:09:56 · 791 阅读 · 2 评论