Redis是一种开源的NoSQL内存数据库,用于高性能的数据存储和访问。Redis支持多种数据类型,包括字符串、哈希、列表、集合和有序集合,并且支持分布式存储和操作。Redis的特点包括快速、高可用和易扩展等,适用于各种应用场景。
一、redis服务器使用场景
1、缓存(Cache)
Redis的第一个应用场景是Redis作为缓存对象来加速Web应用的访问。
在该场景下,有一些存储于数据库中的数据会被频繁访问,如果频繁的访问数据库,数据库负载会升高,同时由于数据库IO比较慢,应用程序的响应会比较差。此时,如果引入Redis来存储这些被频繁访问的数据,就可以有效的降低数据库的负载,同时提高应用程序的请求响应。
2、会话存储(Session)
使用Redis来存储会话(Session)数据,可以实现在无状态的服务器之间共享用户相关的状态数据数据。
当用户登录Web应用时候,将会话数据存储于Redis,并将唯一的会话ID(Session ID)返回到客户端的Cookie中。当用户再向应用发送请求时,会将此会话ID包含在请求中。无状态的Web服务器,根据这个会话ID从Redis中搜索相关的会话数据来进一步请求处理。
这里需要注意的是,Redis是内存数据库,如果采用单实例部署。那么当Redis服务器故障重启之后,所有的Session会话会消失,用户不得不重新登录来获取新的Session。所以,当拿Redis来存储Session的时候,建议采用主从的集群模式来部署。这样,即使主服务器挂了,马上有从库接管流量,不影响用户的使用。
3、分布式锁(Distributed Lock)
当我们在应用中部署了多个节点,这些节点需要操作同一个资源的时候会存在竞争。此时,我们可以使用Redis来作为分布式锁,以协调多个节点对共享资源的操作。
下图中,多台server只有其中一台能拿到lock,从而执行共享资源的操作,get lock fail的server需要等待一段时间后,再获取lock。
上面这个简单实现虽然可以满足很多用例,但它并不具备良好的容错机制。如果要在生产上是用的话,更推荐采用一些更高质量的分布式锁实现。比如,Java平台的话,可以选择:Redisson.
4、速率限制器(Rate Limiter)
由于Redis提供了计数器功能,所以我们可以通过该能力,配合超时时间,来实现速率限制器,最常见的场景就是服务端是用的请求限流。
一个基本的限速实现如下图:
根据用户id或者ip来作为key,使用INCR命令来记录用户的请求数量。然后将该请求数量与允许的请求上限数量做比较,只有低于限制的时候,才会执行请求处理。如果超过限制,就拒绝请求。
同时,请求数量的计数器需要设置一个时间窗口,比如:1分钟。也就是没过一分钟时间,计数器将被清零,重新计数。所以,当一个时间窗口中被限流之后,等到下一个时间窗口,就能恢复继续请求。以实现限制速率的效果。
除了时间窗算法之外,漏桶算法也能通过Redis来实现。
5、排行榜(Rank/Leaderboard)
由于Redis提供了排序集合(Sorted Sets)的功能,所以很多游戏应用采用Redis来实现各种排行榜功能。
排序集合是唯一元素(比如:用户id)的集合,每个元素按分数排序,这样可以快速的按分数来检索元素
二、CentOS8下安装redis
1、从windows下载redis
https://download.redis.io/releases/redis-7.2.2.tar.gz
2、解压,上传到CentOS8
(1)使用winscp登录到CentOS8
(2)上传解压好的redis到C entOS8路径/usr/local下
3、进入到CentOS8中,执行如下命令
(1)cd /usr/local 修改当前目录到/usr/local下
(2)ll 命令查看文件及权限
(3)chmod –R +7 redis-7.2.2 配置redis-7.2.2及其子目录下的访问权限可读写
4、执行make命令进行安装,如果能正常安装,就等待到结束(本次安装的条件是在已经安装好了nacos、seata、rabiitmq、elasticsearch的前提下完成的,首先执行了yum –y update进行更新,所以执行make时可以正常进行)
到此完成make安装
5、如果执行make令报错,redis是由C语言开发,因此安装之前必须要确保服务器已经安装了gcc,那么执行如下命令,安装 c 语言的编译器:
yum install -y cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
make MALLOC=libc
6、继续执行命令安装
注意prefix=/data/redis指定安装目录
7、验证是否安装成功:
(1)能在安装目录的src下,看到redis-server文件
(2)执行命令./redis-server &
启动redis服务,如下图:
(3)按redis.conf配置文件启动redis-server
命令与配置文件不在同一个路径下,执行命令如下:
Cd /usr/local/redis-server-7.2.2/src
./redis-server …/redis.conf
(4)启动后如下:
(5)在src下执行redis-cli命令,可以启动redis-server的命令模式,如下图:
(6)指定登录redis-server的ip地址与密码
命令格式为:redis-cli –a password –h ip
本例执行: redis-cli –a yuanfeng021 –h 192.168.0.132
(7)停止redis-server
Cd /usr/local/redis-7.2.2/src
Redis-cli shutdown
8、配置环境变量
Vi /etc/profile
export REDIS_HOME=/usr/local/redis-7.2.2/src
export PATH= P A T H : PATH: PATH:REDIS_HOME
9、远程连接客户端,redis配置文件中只允许在本机中访问(redis服务在哪台机器上启动就只能在哪台机器上访问)不允许远程连接,如果需要远程访问执行如下命令
cd /usr/local/redis-7.2.2
vim redis.conf
10、修改行
#bind 127.0.0.1 -::1
0.0.0.0允许任何IP访问
bind 0.0.0.0
11、开放redis的6379端口,并重新加载防火墙
firewall-cmd -add-port=6379/tcp --permanent
firewall-cmd -reload
12、使用命令测试6379端口,telnet 192.168.0.132 6379,效果如下:
13、测试redis-server的连接
14、使用redis Desktop Manager工具连接redis server
15、连接成功后,能正常显示连接后的db数据库
至此,本文结束,不足之处敬请批评指正。