消息队列和缓存的初步了解
负载均衡
消息队列message queue
消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅者消费。
queue实现了负载均衡,将producer生产的消息发送到消息队列中,由多个消费者消费。但一个消息只能被一个消费者接受,当没有消费者可用时,这个消息会被保存直到有一个可用的消费者。
topic实现了发布和订阅,当你发布一个消息,所有订阅这个topic的服务都能得到这个消息,所以从1到N个订阅者都能得到一个消息的拷贝。
- RocketMQ 阿里开源,多用于订单交易系统
- RabbitMQ
- Redis 也是一个轻量级的消息队列,它本身也支持MQ的功能
Nginx 负载均衡
客户端向服务器发送一个请求,nginx先进行接收,然后将接收的请求平均分配给集群(多台服务器)来进行处理,减少服务器压力(IO压力)
缓存数据库:减少io的读操作
- 多台服务器如何做到数据同步的问题?
- 四种方式(减少cpu和内存的压力)
- 存入cookie中,不安全,客户端关闭就没了,网络负担效率低
- 复制session,浪费资源,操作冗余,服务器节点越多浪费越大
- 存入缓存数据库中,完全在内存中,速度快,数据结构简单
- 存在文件服务器或者数据库中,会导致大量的io操作
Memcached
- nosql数据库,里面存储的数据只能是字符串
- 数据是存在服务器上的,一关机就没了
redis
原子性 不是事务的原子性:所谓原子操作是指不会被线程调度机制打断的操作。 他们是单线程操作的,不会互相影响
端口 6379 Merz 9键上的位置
使用xshell
- 查看配置 vi redis.conf
- 找到 #bind 注掉 不然只能本机访问
- protected-mode yes 改成 no 不然也只能本地访问
- 然后重启
- redis-cli 登录
- redis常用命令(百度一下)
- clear 清空xshell窗口内容
他的储存只支持字节 byte,不支持bit
订阅和发布
- 发布/订阅(pub/sub)
- 多个redis客户端可订阅一个频道
- redis一个频道发布消息所有订阅的客户端都可以收到
- 订阅和发布的两个指令(百度一下。)
Jedis对象
这个对象才是在java程序中真正控制redis的对象
增删改查都是通过jedis对象 '.' 方法来进行操作
- 需要引入 jedis 依赖
//创建Jedis对象
Jedis jedis = new Jedis( host: "192.168.44.168",port: 6379);
jedis.zadd( key: " china", score: 100d,member: "shanghai");
Set<String> china = jedis.zrange( key: "china",start: 0,stop: -1) ;
System.out.println(china) ;
jedis.close();
生成验证码
Random类
Random random = new Random();
StringBuilder code = "";
for(6次){
code += random.nextInt(10);
}
Spring整合redis
- 导入两个依赖
- spring-boot-starter-data-redis
- commons-pool2
- 记得引入web的启动器
- 配置文件中 配置redis的基本信息
- 添加redis的配置类
- redis在Springboot中的简单使用
- https://blog.csdn.net/weixin_43281498/article/details/123564471
- 自动装配 已注入的Bean RedisTemplate redisTemplate
- 此时可以;联想到JDBCTemplate
- 使用redisTemplate 取值存值操作(百度一下)
- redisTemplate .opsForValue().set(key,value)
- redisTemplate .opsForValue().get(key)
- 可以自己封装一个redis的常用操作工具类
其他有关redis的内容请跳转
【尚硅谷】Redis 6 入门到精通 超详细 教程_哔哩哔哩_bilibili
串行
串行就是一步一步执行,一个一个执行
例如你吃羊肉串 一坨接一坨肉,你从第一个吃到最后一个
Memcached和redis的区别
-
Memcached 多线程+锁
-
redis 单线程+多路io
- 其他人等一个人去请求数据
- 一个请求完再进行下一个人
-
Redis采用单线程+多路IO复用技术
-
多路复用指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就位,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启用线程执行(比如使用线程池)、
-
就是说多路IO复用起到一个监视的效果,就绪后,Redis直接执行,不需要等待
-
串行与采用多线程+锁(Memcached)与单线程+多路IO复用的比较
-
串行:阻塞IO,一件事一件事的做,在做当前事时,不能做其他事,有等待
-
采用多线程+锁:非阻塞IO,一直重复做当前的事,没有等待
-
单线程+多路IO复用:做某件事情需要一定的时间,可以监视这件事,我们可以做其他的事。多路IO复用有select,poll,epoll这些模式。select监测数量能力有限。poll监测数量没有限制,但是需要一个一个核查。配epoll监测数量没有限制,也不需要一个一个核查,直接看是否有一个正确的标识。
本文来自博客园,作者:没有烦恼的猫猫,转载请注明原文链接:https://www.cnblogs.com/maomao777/p/16451830.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)