当前位置:网站首页>Redis学习
Redis学习
2022-08-01 07:58:00 【joy妹妹是菜鸟】
Redis的引入
随着网络请求量越来越大,服务器存在各种压力
解决CPU及内存压力
解决IO压力
分布式集群遇到的问题是
当一个客户端多次请求时,可能每次请求被分到了不同的服务器
但每次都需要验证该客户端是否登录
于是我们可以选择将sessionID和它的值存为key-value对存入数据库(数据库将内容记录在硬盘)中
但是本来数据库查询都是很慢需要优化的过程
于是我们引入Redis
NoSQL数据库
NoSQL数据库
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库
NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。
不遵循SQL标准。
不支持ACID。
远超于SQL的性能。
NoSQL适用场景
对数据高并发的读写
海量数据的读写
对数据高可扩展性的
NoSQL不适用场景
需要事务支持
基于sql的结构化查询存储,处理复杂的关系,需要即席查询。
(用不着sql的和用了sql也不行的情况,请考虑用NoSql)
Redis
Remote Dictionary Server远程字典系统
单线程的内存级别的NoSQL缓存数据库
非常之快(内存比硬盘快)
概述
Redis是一个开源的key-value存储系统。
和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
在此基础上,Redis支持各种不同方式的排序。
与memcached一样,为了保证效率,数据都是缓存在内存中。
区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
并且在此基础上实现了master-slave(主从)同步。
应用场景
配合关系型数据库做高速缓存
高频次,热门访问的数据,降低数据库IO
分布式架构,做session共享
多样的数据结构存储持久化数据
数据类型
(后继学习之后再补充)
- string
- list
- set
- hash
- Zset(带权set)
实例演示
不同服务器使用redis实现session同步(spring-session-redis)
未使用Redis
开启两个项目,controller层测试代码如下:
@RequestMapping("/test.do")
@ResponseBody
public ResultObject test(HttpSession session){
if (session.getAttribute("test")!=null){
System.out.println("exam server"+session.getAttribute("test"));
}else {
System.out.println("没有session");
session.setAttribute("test","this is exam server");
}
return ResultObject.ERROR("数据失败");
}
@RequestMapping("/test.do")
@ResponseBody
public ResultObject test(HttpSession session){
if (session.getAttribute("test")!=null){
System.out.println("springboot server"+session.getAttribute("test"));
}else {
System.out.println("没有session");
session.setAttribute("test","this is springboot server");
}
return ResultObject.ERROR("数据失败");
}
开启Nginx(任务管理器中会有两个nginx.exe)
启动两个项目(记得修改其中一个的端口号)
在地址栏中输入项目中方法的地址映射
(Nginx相关原理及操作见Nginx相关内容)
没有导入redis,启动两个项目时,他们的session会被切换,所以控制台中每次都会提示没有session
在项目中导入Redis
即添加两个依赖:redis和spring-session
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
在配置文件中引入
spring.session.store-type=redis
随后重新启动,并在浏览器中输入映射可以发现:
exam起初没有session,创建session后,exam保存的session可以在springboot server同步
至此,我们通过redis缓存存储session,实现了用户的请求操作执行在不同的服务器上
补充:想要保存用户对象,就要实现序列化
要想反序列化出来要确保在同一个包下
所以,开发过程中,创建实体类都要序列化,对象序列化之后方能存入到redis缓存中
边栏推荐
- nodetype中值1、2、3分别代表什么意思
- pytest interface automation testing framework | single/multiple parameters
- 日志导致线程Block的这些坑,你不得不防
- 179. 最大数
- 图片无损压缩软件哪个好用:试试完全免费的JPG-C 图片批量修整压缩减肥工具吧 | 最新jpg批量修整工具下载
- 最新的Cesium和Three的整合方法(附完整代码)
- Electromagnetic compatibility introductory tutorial (6) test project
- HPC系统简介
- 毕业论文写作技巧
- 基于tika实现对文件类型进行判断
猜你喜欢
随机推荐
配置我的kitty
根据指定区域内容生成图片并进行分享总结
升级为重量级锁,锁重入会导致锁释放?
VSCode 快捷键及通用插件推荐
app 自动化 打开app (二)
codeforces每日5题(均1600)-第二十七天
The socket option
leetcode-6132:使数组中所有元素都等于零
Golang: go open web service
pytest interface automation testing framework | parametrize source code analysis
正则表达式符号
JVM: Runtime Data Area - PC Register (Program Counter)
走进音视频的世界——mp3封装格式
微信小程序请求封装
云原生FAQ
Golang: go to connect and use mysql
将aof文件转换为命令waoffle安装和使用
并发编程13-JUC之CountDownLatch
Data Analysis 6
C语言学习概览(三)