解析核心使用场景与性能优化技巧
redis只能能操作字符串,要把Java对象存入redis非关系型数据库,需要用序列化变成字符串,再反序列化成Java对象
not only sql
NoSQL非关系型数据库:缓存数据库,只能读取数据,用于高访问
redis和memecached是键值对的Nosql,主要用来做缓存的
(对比mysql,每次下载mysql都有一个空的data文件,把数据写入磁盘,读取磁盘的操作,传统的关系型数据库满足不了高访问:相当于现在的固态盘和以前的机械盘对比)
redis简介
1. 优点
- 集群(主从同步,备份服务器,副班长代替职位)
- 支持订阅、发布 群发MQ功能;高并发
- 支持持久化(内存里面存redis键值断电会释放,需要备份),可以备份保存在磁盘里,不仅仅是内存保存
- 数据存储类型 set,zset,string,hash,list列表
2. 配置与安装、启动
解压缩的redis文件夹打开cmd命令行窗口,启动后不关闭,否则redis数据库系统会关闭,等价于tomcat的一个服务器
步骤:
- redis-server.exe redis.windows.conf
- redis-cli.exe
- 进入127.0.0.0:6379
- 密码输入123456
- 默认redis有数据库12个
PS:常用操作会有默认补全命令:设置键值,设置多个,设置自增
启动成功 :
以上:redis的安装配置、启动信息。
3. 常用命令
- 清空 flush
- 切换库 select
- 获取所有 keys *
- expire 过期时间秒级别
需要注意的是:在springboot项目使用redis非关系型数据库需要加入data依赖
redis只能能操作字符串,要把Java对象存入redis非关系型数据库,需要用序列化变成字符串,再反序列化成Java对象。
Redis使用场景
1. 简单概述
一些比较流行的使用场景:
- 中央缓存: 第一次拿到的资源显示在前端,顺便放入redis非关系型数据库,第二次需要查询第一次的数据就直接在中央缓存redis数据库先查询,如果拿不到就再在源头服务器查数据库,重复这个过程。
- 计数器: 点赞,收藏,转发
- 实时防攻击系统:锁定ip访问次数,获取当前登录请求IP地址,黑名单匹配,业务逻辑:每次请求发送过来,先从redis中查询黑名单,错误次数小于5正常访问,如果访问次数大于5,将ip加入黑名单
- 设定有效期: vip和红包,转账时间
- 自动去重
- 队列: 秒杀
- 消息订阅
- 验证码存值和设置失效时间:以若依开源框架为例
- 限制用户下载系统文档数量
这是数据存储和处理的利器!
redis在Java的使用中,有两种序列化方式
1.默认序列化
实现类有Jackson2(值的序列化规则),string(键的序列化规则)
2.JDK序列化

2. 测试(在redis操作值)
存在很多api可以使用
1.opsForValue
2.opsForHash
直接存

通过map存值

取一个 值

取出整个对象,包括所有属性值

获取hashkeys(keys)

获取值values

判断存在性

set

3.失效时间
关键词:TimeUnit、seconds、minute

测试db和redis的效率

@value注解

就我自己而言,使用图形化界面redis manager更方便。类似数据库的navicat。

3. 业务实现(以若依框架的验证码为例)
逻辑:
查询数据现在redis里面查询,如果有直接拿出来,不查询数据库
如果没有,就查数据库,顺便把查出的数据放入redis


后端生成表达式1+1=?@2
用@符号进行字符串分割,前面的表达式转换成图片,转到前端进行展示。答案2存入redis中,与前端提交过来的登录表单匹配,如果正确就登陆成功,错误就登陆失败。
redis默认16个(0-15)数据库

前端:login.vue

getCodeImg()/api/login.js 调用资源登录js文件
写请求方法和请求头,过期时间
封装request请求方法


网络登录请求实时的方法:

request.js的axios封装的请求

开发,生产和测试环境


http://192.168.137.1/dev-api/captchaImage
请求后端的验证码图片
但是需要加上8080端口号,这里并没有加上
使用反向代理:url请求前端,进行代理,映射到后端,解决跨域问题
配置文件 vue.config.js
跨域代理举例:

验证码后端
http://192.168.137.1/dev-api/captchaImage
映射地址变成:
http://192.168.137.1//captchaImage


redis中验证码设置的有效期,两分钟

结语
以下是将 Redis 实战项目简化为 Excel 表格的形式,按场景、用途、数据结构、命令、技术栈和案例分类整理:希望这篇文章能够带你全面了解redis的潜力,让你的代码世界更加丰富多彩!
从实践中记忆更深刻,现在,拿起redis开始操作吧!!
参考资料:
我的账号文章