
Redis
文章平均质量分 91
Onlooker129
这个作者很懒,什么都没留下…
展开
-
Redis21-内存回收
Redis之所以性能强,最主要的原因就是基于内存存储,然而单节点的Redis其内存大小不宜过大,会影响持久化或主从同步性能可以通过修改配置文件来设置Redis的最大内存:当内存使用达到上限时,就无法存储更多数据,为了解决这个问题,Redis提供了一些策略实现内存回收:可以通过expire命令给Redis的key设置TTL(存活时间):当key的TTL到期以后,再次访问name返回的是nil,说明这个key已经不存在了,对应的内存也得到释放,从而起到内存回收的目的Redis本身是一个典型的key-value内原创 2024-08-14 16:09:38 · 828 阅读 · 0 评论 -
Redis20-通信协议
因此客户端发送命令的格式、服务端响应结果的格式必须有一个规范,这个规范就是通信协议目前,默认使用的依然是RESP2协议(RESP)原创 2024-08-14 15:09:18 · 433 阅读 · 0 评论 -
Redis19-Redis网络模型
如果调用recvfrom时,恰好没有数据,阻塞IO会使CPU阻塞,非阻塞IO使CPU空转,都不能充分发挥CPU的作用如果调用recvfrom时,恰好有数据,则用户进程可以直接进入第二阶段,读取并处理数据比如服务端处理客户端Socket请求时,在单线程情况下,只能依次处理每一个socket,如果正在处理的socket恰好未就绪(数据不可读或不可写),线程就会被阻塞,所有其他客户端socket都必须等待,性能很差多线程数据就绪再去读取数据。原创 2024-08-14 11:40:24 · 1058 阅读 · 0 评论 -
Redis18-Redis数据结构
Redis构建了一种新的字符串结构,称为简单动态字符串(Simple Dynamic String),简称SDSRedis是C语言实现的,其中SDS是一个结构体,源码如下:例如,一个包含字符串“name”的sds结构如下: SDS之所以叫做动态字符串,是因为它具备动态扩容的能力,例如一个内容为“hi”的SDS:假如要给SDS追加一段字符串“,Amy”,这里首先会申请新内存空间:原创 2024-08-14 09:49:18 · 853 阅读 · 0 评论 -
Redis17-服务端优化
在Redis执行时耗时超过某个阈值的命令,称为慢查询慢查询的危害:由于Redis是单线程的,所以当客户端发出指令后,它们都会进入到Redis底层的queue来执行,如果此时有一些慢查询的数据,就会导致大量请求阻塞,从而引起报错slowlog-log-slower-than:慢查询阈值,单位是微秒。默认是10000,建议1000slowlog-max-len:慢查询日志(本质是一个队列)的长度。默认是128,建议1000。原创 2024-08-13 11:53:08 · 1114 阅读 · 0 评论 -
Redis16-批处理优化
单个命令的执行流程:N条命令的执行流程:N条命令批量执行:Redis提供了很多Mxxx这样的命令,可以实现批量插入数据,例如:利用mset批量插入10万条数据:注意:不要在一次批处理中传输太多命令,否则单条命令占用带宽过多,会导致网络阻塞MSET虽然可以批处理,但是却只能操作部分数据类型,因此如果有对复杂数据类型的批处理需要,建议使用Pipeline 总结:批量处理的方案:注意事项:如MSET或Pipeline这样的批处理需要在一次请求中携带多条命令,而此时如果Redis是一个集群,那批处理命原创 2024-08-13 10:56:58 · 531 阅读 · 0 评论 -
Redis15-Redis键值设计
Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定:遵循基本格式:[业务名称]:[数据名]:[id]长度不超过44字节不包含特殊字符原创 2024-08-13 09:49:09 · 898 阅读 · 0 评论 -
Redis14-缓存同步
缓存数据同步的常见方式有三种:1.设置有效期:给缓存设置有效期,到期后自动删除,再次查询时更新2.同步双写:在修改数据库的同时,直接修改缓存3.异步通知:修改数据库时发送事件通知,相关服务监听到通知后修改缓存数据。原创 2024-08-12 20:57:39 · 952 阅读 · 0 评论 -
Redis13-多级缓存
传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,存在下面的问题:多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻Tomcat压力,提升服务性能:用作缓存的Nginx是业务Nginx, 需要部署为集群,再有专门的Nginx用来做反向代理,Tomcat也要部署为集群模式:多级缓存的关键有两个:缓存在日常开发中启动至关重要的作用,由于是存储在内存中,数据的读取速度是非常快的,能大量减少对数据库的访问,减少数据库的压力缓存分为两类:分布式缓存,例如Redis:优点:存原创 2024-08-12 20:30:16 · 1509 阅读 · 0 评论 -
Redis12-分布式缓存-Redis分片集群
主从和哨兵可以解决高可用、高并发读的问题,但是依然有两个问题没有解决:海量数据存储问题高并发写的问题使用分片集群可以解决上述问题,分片集群特征:集群中有多个master,每个master保存不同数据每个master都可以有多个slave节点master之间通过ping监测彼此健康状态客户端请求可以访问集群任意节点,最终都会被转发到正确节点原创 2024-08-11 21:19:52 · 537 阅读 · 0 评论 -
Redis11-分布式缓存-Redis哨兵
Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复哨兵的结构如下:作用:监控:Sentinel 会不断检查master和slave是否按预期工作自动故障恢复:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主通知:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端。原创 2024-08-11 21:01:58 · 735 阅读 · 0 评论 -
Redis10-分布式缓存-Redis主从
单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离修改端口号和dir,对应自己所在目录分别启动三个redis实例开启主从关系配置主从可以使用replicaof 或者slaveof(5.0以前)命令有临时和永久两种模式:修改配置文件(永久生效):在redis.conf中添加一行配置使用redis-cli客户端连接到redis服务,执行slaveof命令(重启后失效)注意:在5.0以后新增命令replicaof,与salveof效果一致。原创 2024-08-11 17:38:46 · 756 阅读 · 0 评论 -
Redis9-分布式缓存-Redis持久化
RDB全称Redis Database Backup file(Redis数据备份文件),也叫做Redis数据快照,简单来说就是把内存中的所有数据都记录到磁盘中,当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据,完成fork后读取内存数据并写入RDB。save命令会导致主进程执行RDB,这个过程中其它所有命令都会被阻塞,只有在数据迁移时可能用到。这个命令执行后会开启独立进程完成RDB,主进程可以持续处理用户请求,不受影响。原创 2024-08-11 16:08:33 · 782 阅读 · 0 评论 -
Redis8-消息队列
消息队列(Message Queue):字面意思就是存放消息的队列最简单的消息队列模型包括3个角色:消息队列:存储和管理消息,也被称为消息代理(Message Broker)生产者:发送消息到消息队列消费者:从消息队列获取消息并处理消息。原创 2024-08-11 10:57:47 · 822 阅读 · 0 评论 -
Redis7-分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。原创 2024-08-09 16:22:42 · 1470 阅读 · 0 评论 -
Redis6-秒杀
全局ID生成器,是一种在分布式系统下用来生成全局唯一ID的工具,一般要满足下列特性:为了增强ID的安全性,不直接使用Redis自增的数值,而是拼接一些其他信息:ID的组成部分:全局唯一ID生成策略:Redis实现全局唯一ID:实现优惠券秒杀下单每个店铺都可以发布优惠券,分为平价券和特价券平价券可以任意购买,而特价券需要秒杀抢购tb_voucher:优惠券的基本信息,优惠金额、使用规则等tb_seckill_voucher:优惠券的库存、开始抢购时间,结束抢购时间。特价优惠券才需要填写这些信息原创 2024-08-08 21:03:18 · 1013 阅读 · 0 评论 -
Redis5-缓存
缓存是数据交换的缓冲区(Cache),是存贮数据的临时地方,一般读写性能较高。原创 2024-08-07 20:18:38 · 1594 阅读 · 0 评论 -
Redis4-短信登录
sql文件:模型:后端:hm-dianping前端:发送验证码:用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号如果手机号合法,后台此时生成对应的验证码,同时将验证码进行保存,然后再通过短信的方式将验证码发送给用户短信验证码登录、注册:用户将验证码和手机号进行输入,后台从session中拿到当前验证码,然后和用户输入的验证码进行校验,如果不一致,则无法通过校验,如果一致,则后台根据手机号查询用户,如果用户不存在,则为用户创建账号信息,保存到数据库原创 2024-08-06 21:36:19 · 473 阅读 · 0 评论 -
Redis3-Redis的Java客户端
在Redis官网中提供了各种语言的客户端,其中Java客户端也包含很多:Jedis和Lettuce这两个主要是提供了Redis命令对应的API,方便操作Redis,而SpringDataRedis又对这两种做了抽象和封装。原创 2024-08-06 15:09:53 · 972 阅读 · 0 评论 -
Redis2-Redis常见命令
Redis是一个key-value的数据库,key一般是String数据库,value的类型多种多样可以通过help命令查看命令:通用指令是部分数据类型都可以使用的指令,常见的有:在生产环境下,不推荐使用KEYS命令,因为这个命令在key过多的情况下,效率不高原创 2024-08-05 19:29:03 · 1177 阅读 · 0 评论 -
Redis1-初识Redis
Redis是一种键值型的NoSql数据库键值型是指Redis中存储的数据都是以key.value对的形式存储,value的形式多种多样,可以是字符串、数值、jsonNoSql数据库对于存储的数据,没有类似MySQL那么严格的约束NoSql:非关系型数据库传统关系型数据库是结构化数据,每一张表都有严格的约束信息:字段名、字段数据类型、字段约束等信息,插入的数据必须遵守这些约束:非关系型数据库对数据库格式没有严格约束,往往形式松散、自由可以是键值型:可以是文档型:可以是图格式:传统数据库的表与表之间往往存在关联原创 2024-08-05 16:35:28 · 479 阅读 · 0 评论