当前位置:网站首页>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缓存中
边栏推荐
- Redis 3.2.3 crashed by signal: 11 服务宕机问题排查
- Golang: go get url and form attribute value
- 【一句话攻略】彻底理解JS中的回调(Callback)函数
- Fist game copyright-free music download, League of Legends copyright-free music, can be used for video creation, live broadcast
- 特殊的日子,值得纪念
- Golang: go static file processing
- Go supports OOP: use struct instead of class
- 22 Niu Ke Duo School 1 I. Chiitoitsu (Probability dp)
- 请问用flinksql写入数据到clickhouse需要引入什么依赖吗?
- Delphi MDI appliction documents maximize display, remove buttons such as maximize and minimize
猜你喜欢
随机推荐
Golang: go static file processing
Golang:go模版引擎的使用
2022.7.31-----leetcode.1161
数据分析6
POJ2031空间站题解
leetcode-6132:使数组中所有元素都等于零
VoLTE基础学习系列 | 什么是SIP和IMS中的Forking
Data Analysis 6
leetcode-6135:图中的最长环
电磁兼容简明教程(6)测试项目
pytest接口自动化测试框架 | 跳过模块
最小生成树
C语言学习概览(二)
HoloView 在 jyputer lab/notebook 不显示总结
我的创作纪念日
22 Grab the Seat 1 C.Grab the Seat (Geometry + Violence)
特殊的日子,值得纪念
正则表达式符号
Golang: go get url and form attribute value
22牛客多校1 J.Serval and Essay (启发式合并)