Redis
Redis是一个开源的,基于内存的数据结构存储,可用作于数据库、缓存、消息中间件。
- Redis基于内存,支持多种数据结构。
- Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。
Mac安装
brew install redis
复制代码
查看安装及配置文件位置
- Homebrew安装的软件会默认在
/usr/local/Cellar/
路径下 - redis的配置文件
redis.conf
存放在/usr/local/etc
路径下
启动 redis
//方式一:使用brew帮助我们启动软件
brew services start redis
//方式二
redis-server
复制代码
5、查看redis服务进程
我们可以通过下面命令查看redis是否正在运行
ps axu | grep redis
复制代码
6、redis-cli连接redis服务
redis默认端口号6379,默认auth为空,输入以下命令即可连接
redis-cli -h 127.0.0.1 -p 6379
复制代码
7、启动 redis 客户端,打开终端并输入命令 redis-cli。该命令会连接本地的 redis 服务。
$redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG
复制代码
在以上实例中我们连接到本地的 redis 服务并执行 PING 命令,该命令用于检测 redis 服务是否启动。
8、关闭 redis 服务
- 正确停止Redis的方式应该是向 Redis 发送 SHUTDOWN 命令
redis-cli shutdown
复制代码
- 强行终止 redis
sudo pkill redis-server
复制代码
9、redis.conf 配置文件详解
redis 默认是前台启动,如果我们想以守护进程的方式运行(后台运行),可以在 redis.conf 中将 daemonize no
,修改成 yes
即可。
可视化工具Redis Desktop Manager
安装方法
-
安装brew cask : 在终端中输入下面语句 回车
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null ; brew install caskroom/cask/brew-cask 2> /dev/null 复制代码
可能会需要你的mac密码,输入即可
-
安装Redis Desktop Manager
安装完cask之后,在终端中输入 回车
brew install rdm --cask brew install another-redis-desktop-manager --cask 复制代码
整合Resis
我们使用 Redis 最主要是将其作为缓存,使用缓存主要是为了提升用户体验以及应对更多的用户,从程序设计而言是为了高性能和高并发。
高性能 :
假如用户第一次访问数据库中的某些数据的话,这个过程是比较慢,毕竟是从硬盘中读取的。但是,如果说,用户访问的数据属于高频数据并且不会经常改变的话,那么我们就可以很放心地将该用户访问的数据存在缓存中。
这样有什么好处呢? 那就是保证用户下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。
不过,要保持数据库和缓存中的数据的一致性。 如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可!
高并发:
一般像 MySQL 这类的数据库的 QPS 大概都在 1w 左右(4核8g) ,但是使用 Redis 缓存之后很容易达到 10w+,甚至最高能达到30w+(就单机redis的情况,redis 集群的话会更高)。
QPS(Query Per Second):服务器每秒可以执行的查询次数;
所以,直接操作缓存能够承受的数据库请求数量是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。进而,我们也就提高的系统整体的并发。
不过在本文中,我们仅仅使用 Redis 作为临时缓存,用来存储用户注册时所需的验证码以及用户登录后缓存用户信息。
项目实践
创建一个新项目,名为 springboot-redis.
1、首先引入依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath/>
</parent>
<properties>
<mysql.version>8.0.19</mysql.version>
<org.mapstruct.version>1.4.2.Final</org.mapstruct.version>
<org.projectlombok.version>1.18.20</org.projectlombok.version>
<druid.version>1.1.18</druid.version>
</properties>
<dependencies>
<!-- 以下是>spring boot依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-sec