Redis

[复制链接]
发表于 2025-10-15 12:44:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
2025年1月17号晚
SQL与NOSQL的对比:



Redis常改的设置文件:



这种设置文件的日志日志文件会创建在当前工作目次下
这种方式启动Redis比力贫苦, 可以做到开机自启: 
1.编写设置文件,然后:


Redis有三种毗连方式:

下令行客户端, 图形界面客户端, 编程语言

一开始的时间应该熟悉这些个下令, 在背面照旧利用图形化客户端比力方便, 就类似于SQLyog


Redis的数据结构:


Redis的常用下令:


可以通过官网大概help下令来检察相干的利用阐明,
TTL返回-1阐明是永世, 返回-2阐明已经失效
此中这个KEYS不发起在生产情况中利用, 其提供暗昧搜刮的功能,*表现恣意个,?表现一个,暗昧搜刮的服从是比力低的
String范例:


整型和浮点型在底层存储时与平常字符串具有差别, 可以实现增减
Key的结构:
为了包管key的唯一性


Hash范例:



List范例:



这个列表的左侧为首,右侧为尾,左侧第一个是0
此中BLPOP和BRPOP在没偶尔会等待指定时间,而不是直接返回空, 类似于壅闭

Set范例:




SortedSet:​​​​​​范例​


Java客户端:

Jedis:


在单位测试中@AfterEach和@BeforeEach修饰的方法是在每个测试方法实行前后分别实行的,是JUnit中非常常用的两个注解

SpringDataRedis:


留意RedisTemplate汲取的是一个Object对象,然后根据数据结构的范例利用序列化器将其序列化为字节数组,末了存储在Redis中的是一个字节数组, 在读取数据的时间会利用对应的反序列化器将其转换为Java对象,这个过程包管了Redis存储和Java对象之间的兼容性
这种利用jdk序列化工具的序列化方式存在毛病:

办理方案: 通过编写设置类来修改RedisTemplate的序列化的工具来实现差别的序列化方式, 可以使得所存即所见(存"giao", 在Redis中看到的就是"giao", 而不是一个字节数组), 如下图的设置类所示, 根据数据结构的差别接纳差别的序列化工具可以实现所存即所见的目的.

训练过程碰到的错误:

在我演示代码时碰到的几个错误: 1.Linux对于6379端口防火墙是不答应外部毗连的,
2.Java的jdk的序列化工具对于信息的存储是所存非所见的, 以是在redis中手动的存储的key,通过Java来访问是null, 由于通过Java的jdk序列化之后在redis中是找不到的,以是就为null, 但是通过Java存储的就能找到.以是这时就须要自界说序列化工具来实现所见即所存(利用别的序列化工具)大概利用别的序列化工具, 比如spring自带的StringRedisTemplate, 对于类,可以利用json序列化工具序列化之后再利用StringRedisTemplate写入Redis
在利用json序列化工具反序列化时要包管类具有无参构造函数和getter,setter方法, 这是许多工具给对象赋值所须要的.
关于lombok: 先引入依赖, Data是getter,setter方法, equals方法, toString方法, hashCode方法
@NoArgsConstruct是提供无参构造器
@AllArgsConstruct是全参构造器
为了使 Lombok 在你的 IDE 中正常工作,你大概须要安装 Lombok 插件。大多数盛行的 IDE(如 IntelliJ IDEA 和 Eclipse)都有可用的 Lombok 插件。安装插件后,IDE 将可以大概辨认 Lombok 注解并准确编译代码, 以后碰到题目大概是这方面的缘故原由
高级篇:

分布式缓存:


长期化:

RDB:



Linux不是直接操纵物理内存的, 而是管理一个捏造内存(页表),捏造内存和物理内存之间存在映射关系. 当bgsave时,会将物理内存标记为只读, 这 时如果有新的写操纵的哀求就会对物理内存举行拷贝, 以后对该数据的读取也会转移到这个副本上. 如果,子历程写入磁盘的时间比力长,此时有大量的写操纵涌入, 就会对内存有很大的斲丧.

AOF:
 


主从:

具体怎样搭建, 看资料:\BaiduNetdiskDownload\Redis-条记资料\03-高级篇\资料\Redis集群.md






哨兵:

具体怎样搭建, 看资料:\BaiduNetdiskDownload\Redis-条记资料\03-高级篇\资料\Redis集群.md


这内里最紧张的就是offset值, 如果offset的值都一样,那么选哪个作为master也就没有区别了.


RedisTemplate的哨兵模式:


留意: 只须要设置哨兵的地点, 其他都交给哨兵来完成.

这个方法可以写在启动类中.
分片集群:


之以是可以访问集群恣意节点,末了都会被转发到准确节点是由于这些节点之间会做自动的路由(大概叫重定向).

也就是说数据跟着插槽走,而不是跟着节点, 如许的话,当节点宕机时,将插槽转移到活的节点即可包管数据不丢失.

牢记在集群模式下要加上 -c

也有手动分配插槽的下令等等.


多级缓存:


JVM历程缓存:


它提供了一个get方法, 如果未掷中可以去到数据库中查询, 查询之后自动的将数据写入缓存.

Lua语法:

CentOs自带lua文件的运行情况, lua文件不须要编译, 可以直接运行.


lua有一种特殊的下令行方式, 直接输入lua就能进入lua的控制台

local表现该变量为局部变量, 不消local修饰, 则表明该变量是全局变量
lua数组的角标是从1开始.
在lua中字符串的拼接是用 ".." ,比方:
  1. local str  = "hello" .. "world"
复制代码

遍历数组和table的示例, 留意: 一个是ipairs, 一个是pairs


OpenResty:

关于openResty的安装教程见文档: D:\BaiduNetdiskDownload\Redis-条记资料\03-高级篇\资料

向tomcat发送哀求:


留意: 这个ngx.location.capture发送的哀求会被Nginx本身监听, 以是我们须要对这个路径做反向署理到tomcat服务器


差别的历程的数据不是共享的, 也就说差别的tomcat对应的差别的JVM之间数据独立, 那么就要包管雷同的哀求路径每次都访问雷同的tomcat, hash $request-cluster是用来对路径做一种算法来天生一个hash值, 然后对集群设置的数量取模,就能包管雷同的路径每次都是访问雷同的tomcat.
Redis缓存预热:



留意: 1.InitializingBean, 这个接口必须要实现afterPropertiesSet()方法, 该方法在类加载完成后自动调用.
查询Redis:



Nginx当地缓存:



先去查当地缓存, 缓存未掷中则去查Redis, 还没掷中就去查数据库(发送哀求给tomcat), 末了将数据写入当地缓存.
缓存同步:


安装Canal见文档:\BaiduNetdiskDownload\Redis-条记资料\03-高级篇\资料

业务逻辑的实现:

最佳实践:

键值筹划:


object encoding key, 可以检察其编码方式, 只管保持在44个字节内, 如许就能制止利用row的底层编码方式.
BigKey:



存储对象时,保举利用hash范例的数据结构存储

可以通过下令行的方式来修改hash-max-ziplist-entries, 一样平常要求不能高出1000, 由于大于1000就大概造成bigKey题目, 重启后修改的值会失效.


批处理处罚:


实行下令斲丧的时间和网络传输的时间相比可以忽略不计, 也就是说下令的相应时间紧张花在网络传输上面.

原生的M操纵是说, 这些下令是内置在Redis中的, 而且实行起来是原子性的, 
Pipeline的操纵不是原子性的, 也就是说pipeline发送死令到Redis, 会一条一条的实行, 如果此时有别的哀求也发送到的Redis中, 由于到的时间有先后, 以是大概会将pipeline发送的下令被分段实行, 如许就不发包管实行的时效性, 优点就是pipeline可以同时传输差别的下令.

数据倾斜: 比如要实行10000个写操纵, 那么这一万条数据全部都生存在同一个Redis服务端当中, 也就是说服务端数据的分配不均, 这就是数据倾斜.
发起利用并行Slot的方法, Spring也提供了实行的方法

服务端优化:

长期化设置:


慢查询:


Redis有一个队列存储汲取到的哀求.

安全设置:


内存设置:

集群和主从:



Redis原理篇:

数据结构:

SDS:



IntSet:

IntSet应该在数据量不太大的时间利用.

Dict:


为了方便增长元素, 新加的元素永世在链表的队首.
size的巨细永世是2的n次方, 因此h&sizemask的值才和size%h的值同等.

ZipList:


QuickList:


SkipList:


RedisObject:


五种数据结构:

String:

在利用String时最好包管字符串的长度不要高出44字节, 能用int表现最好利用int



List:


Set:



ZSet:


Hash:



网络模子:

用户空间和内核空间:



IO多路复用:




惊群征象: 比如有多个历程监听同一个FD(调用epoll_wait), 这时FD预备停当时, 此中有历程来读取文件, 由于LT模式在读取时不会将FD从链表中删除, 这就会导致多个历程都来读取该FD


通讯协议:

RESP:


内存接纳:


逾期战略:


镌汰战略:







回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表