大家都知道,现在只要是个系统就会有缓存的存在,而且几乎所有的系统都离不开Redis,可见Redis在现在系统的重要性。
所以,今天我们就来聊一下Redis,当然主要聊聊Redis在不同业务场景下的使用。
接下来,我们先从缓存的世界开始,一步步揭开Redis的神秘面纱。
1. 缓存发展史&缓存分类
1.1 大型网站中缓存的使用
访问量越大,响应力越差,用户体验越差
引入缓存、示意图如下:
高性能 :
假如用户第一次访问数据库中的某些数据的话,这个过程是比较慢,毕竟是从硬盘中读取的。但是,如果说,用户访问的数据属于高频数据并且不会经常改变的话,那么我们就可以很放心地将该用户访问的数据存在缓存中。
这样有什么好处呢? 那就是保证用户下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。
不过,要保持数据库和缓存中的数据的一致性。 如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可!
高并发:
一般像 MySQL 这类的数据库的 QPS 大概都在 1w 左右(4 核 8g) ,但是使用 Redis 缓存之后很容易达到 10w+,甚至最高能达到 30w+(就单机 redis 的情况,redis 集群的话会更高)。
QPS(Query Per Second):服务器每秒可以执行的查询次数;
所以,直接操作缓存能够承受的数据库请求数量是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。进而,我们也就提高的系统整体的并发。
1.2 常见缓存的分类
分布式缓存
分布式缓存主要解决的是单机缓存的容量受服务器限制并且无法保存通用的信息。因为,本地缓存只在当前服务里有效,比如如果你部署了两个相同的服务,他们两者之间的缓存数据是无法共同的。
具有缓存功能的中间件:Redis、Memcache、Tair(阿里 、美团)等等
1.3 分布式缓存选型方案对比
Memcache和Redis区别
共同点 :
- 都是基于内存的数据库,一般都用来当做缓存使用。
- 都有过期策略。
- 两者的性能都非常高。
区别 :
- Redis 支持更丰富的数据类型(支持更复杂的应用场景)。Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。Memcached 只支持最简单的 k/v 数据类型。
- Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而 Memecache 把数据全部存在内存之中。
- Redis 有灾难恢复机制。 因为可以把缓存中的数据持久化到磁盘上。
- Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是 Redis 目前是原生支持 cluster 模式的.
- Memcached 是多线程,非阻塞 IO 复用的网络模型;Redis 使用单线程的多路 IO 复用模型。 (Redis 6.0 引入了多线程 IO )
相信看了上面的对比之后,我们已经没有什么理由可以选择使用 Memcached 来作为自己项目的分布式缓存了。
2. Redis概述&安装配置
2.1 概述
中文官网地址:http://www.redis.cn
简单来说 Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。
另外,Redis 除了做缓存之外,Redis 也经常用来做分布式锁,甚至是消息队列。
Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。
Redis应用场景
- 缓存使用,减轻DB压力
- DB使用,用于临时存储数据(字典表,购买记录)
- 解决分布式场景下Session分离问题(登录信息)
- 任务队列(秒杀、抢红包等等) 乐观锁
- 应用排行榜 zset
- 签到 bitmap
- 分布式锁
- 冷热数据交换
2.3 安装&配置
Redis没有官方的windows版本,所以建议在linux系统上去运行
选择下载稳定版本、不稳定版本可以尝鲜、但是不推荐在生产环境中使用
安装
第一步:安装 C 语言需要的 GCC 环境
yum install -y gcc-c++
yum install -y wget
第二步:下载并解压缩 Redis 源码压缩包
# 下载
wget https://download.redis.io/releases/redis-6.2.4.tar.gz
mkdir /usr/local/redis
tar -zxvf redis-6.2.4.tar.gz -C /usr/local/redis
第三步:编译 Redis 源码,进入 redis-6.2.4 目录,执行编译命令,进行安装
cd /usr/local/redis/redis-6.2.4/src
make && make install
执行完毕后安装成功!
启动
前端启动
- 启动命令: redis-server ,直接运行 bin/redis-server 将以前端模式启动
- 关闭命令: ctrl+c
- 启动缺点:客户端窗口关闭则 redis-server 程序结束,不推荐使用此方法
- 启动图例:
后端启动(守护进程启动)
- 第一步:拷贝 redis-6.2.4/redis.conf 配置文件到 Redis 安装目录的 bin 目录
cp redis.conf /usr/local/redis
- 第二步:修改 redis.conf
vim redis.conf
- 第三步:修改 redis.conf
(1)修改daemonize no ---> daemonize yes,目的是为了让redis启动在linux后台运行
(2)修改redis的工作目录:(名称随意)
- 第四步:启动服务
.redis-server redis.conf
查看进程
- 后端启动的关闭方式
.redis-cli shutdown
命令说明
redis-server :启动 redis 服务
redis-cli :进入 redis 命令客户端
redis-benchmark : 性能测试的工具
redis-check-aof : aof 文件进行检查的工具
redis-check-dump : rdb 文件进行检查的工具
redis-sentinel : 启动哨兵监控服务
Redis命令行客户端
- 命令格式
.redis-cli -h 127.0.0.1 -p 6379
- 参数说明
-h:redis服务器的ip地址
-p:redis实例的端口号
- 默认方式:如果不指定主机和端口也可以 默认主机地址是127.0.0.1 默认端口是6379
.redis-cli
2.4 ui
命令行已经足够强大,尤其是高版本,强大到怀疑人生
但是!它并不友好,业界有很多ui可供使用,典型的:Another Redis Desktop Manager
1)开源
源码地址:https://gitee.com/qishibo/AnotherRedisDesktopManager
编译包下载:https://g