为什么选择Redis?解析核心使用场景与性能优化技巧

解析核心使用场景与性能优化技巧

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的一个服务器

步骤:

  1. redis-server.exe redis.windows.conf
  2. redis-cli.exe
  3. 进入127.0.0.0:6379
  4. 密码输入123456
  5. 默认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开始操作吧!!

参考资料:
我的账号文章

相关推荐
王磊鑫1 小时前
重返JAVA之路-初识JAVA
java·开发语言
半兽先生1 小时前
WebRtc 视频流卡顿黑屏解决方案
java·前端·webrtc
南星沐2 小时前
Spring Boot 常用依赖介绍
java·前端·spring boot
代码不停3 小时前
Java中的异常
java·开发语言
老李不敲代码3 小时前
榕壹云外卖跑腿系统:基于Spring Boot+MySQL+UniApp的智慧生活服务平台
spring boot·mysql·微信小程序·uni-app·软件需求
Justice link3 小时前
部署redis cluster
数据库·redis·缓存
何似在人间5753 小时前
多级缓存模型设计
java·jvm·redis·缓存
多云的夏天3 小时前
ubuntu24.04-MyEclipse的项目导入到 IDEA中
java·intellij-idea·myeclipse
Fanxt_Ja4 小时前
【数据结构】红黑树超详解 ---一篇通关红黑树原理(含源码解析+动态构建红黑树)
java·数据结构·算法·红黑树
Aphelios3804 小时前
TaskFlow开发日记 #1 - 原生JS实现智能Todo组件
java·开发语言·前端·javascript·ecmascript·todo