前言
环境:centos7 redis-6.2.6.tar.gz
查看哪个是稳定版本:https://redis.io/download/
下载地址:https://download.redis.io/releases/
redis使用场景
很多大型电商网站、视频直播和游戏应用等,存在大规模数据访问,对数据查询效率要求高,且数据结构简单,不涉及太多关联查询。这种场景使用redis,在速度上对传统磁盘数据库有很大优势,能够有效减少数据库磁盘IO,提高数据查询效率,减轻管理维护工作量,降低数据库存储成本。redis对传统磁盘数据库是一个重要的补充,成为了互联网应用,尤其是支持高并发访问的互联网应用必不可少的基础服务。电商网站的商品类目、推荐系统以及秒杀抢购活动,适宜使用redis缓存数据库。
例如秒杀抢购活动,并发高,对于传统关系型数据库来说访问压力大,需要较高的硬件配置(如磁盘IO)支撑。redis数据库,单节点QPS支撑能达到10万,轻松应对秒杀并发。实现秒杀和数据加锁的命令简单,使用SET、GET、DEL、RPUSH等命令即可。
1、(视频直播)消息弹幕:直播间的在线用户列表,礼物排行榜,弹幕消息等信息,都适合使用redis中的SortedSet结构进行存储。例如弹幕消息,可使用ZREVRANGEBYSCORE排序返回,在redis 5.0中,新增了zpopmax,zpopmin命令,更加方便消息处理。
2、(游戏应用)游戏排行榜:在线游戏一般涉及排行榜实时展现,比如列出当前得分最高的10个用户。使用redis的有序集合存储用户排行榜非常合适,有序集合使用非常简单,提供多达20个操作集合的命令。
3、(社交APP)返回最新评论/回复:在web类应用中,常有“最新评论”之类的查询,如果使用关系型数据库,往往涉及到按评论时间逆排序,随着评论越来越多,排序效率越来越低,且并发频繁。使用redis的List(链表),例如存储最新1000条评论,当请求的评论数在这个范围,就不需要访问磁盘数据库,直接从缓存中返回,减少数据库压力的同时,提升APP的响应速度。
redis的数据流
安装必要依赖、gcc编译工具
yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc
yum -y install devtoolset-9-c++
yum -y install devtoolset-9-binutils scl enable devtoolset-9
安装redis
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
tar -zxvf redis-6.2.6.tar.gz
# 进入解压目录开始编译
cd redis-6.2.6/
#编译,-j表示开启4个线程编译
make -j 4
#创建一个目录,作为redis安装目录
mkdir /usr/local/redis-6.2.6
#正式安装redis,加PREFIX参数指定redis安装到/usr/local/redis-6.2.6目录下
#如果不加的话直接执行make install的话,默认安装二进制命令就会生成到/usr/local/bin下
make PREFIX=/usr/local/redis-6.2.6 install
#进入redis的安装目录
cd /usr/local/redis-6.2.6
#ll查看一下有哪些文件,发现只有一个bin目录
[root@redis redis-6.2.6]# ll
total 0
drwxr-xr-x 2 root root 134 Jan 23 22:31 bin
[root@redis redis-6.2.6]#
#其实就是生成了redis-server、redis-cli等6个命令文件而已
[root@redis redis-6.2.6]# tree bin/
bin/
redis-benchmark
redis-check-aof -> redis-server
redis-check-rdb -> redis-server
redis-cli
redis-sentinel -> redis-server
redis-server
0 directories, 6 files
[root@redis redis-6.2.6]#
创建目录
刚才我们上面看到redis的/usr/local/redis-6.2.6
安装目录默认只有一个bin目录,为了规范一点,我们手动创建一下目录:
#进入redis的安装目录
cd /usr/local/redis-6.2.6
#创建3个目录,etc用于存放redis的主配置文件,logs目录存放redis日志,data用于存放redis的持久化数据
mkdir etc logs data
复制配置文件
redis的启动需要指定配置文件,在我们解压的源码包里就有默认配置文件,为了方便。这里把它复制一份到redis的安装目录下:
#复制一份源码包配置文件到redis安装目录
cp /redis-6.2.6/redis.conf /usr/local/redis-6.2.6/etc/
修改配置文件
默认的redis配置文件是以前台的方式运行redis,这里需要修改一下配置,让redis启动的时候在后台守护进程方式运行,以及设置登陆密码等。
# 进入到配置文件etc目录
cd /usr/local/redis-6.2.6/etc/
[root@redis etc]# vim redis.conf #主要启用或修改下面这些参数即可
[root@redis redis-6.2.6]# grep -Ev "#|$^" etc/redis.conf
bind 0.0.0.0 #设置绑定本机哪些IP,0.0.0.0表示本机全部可用IP,建议设置本机IP即可
port 6379 #redis的默认监听端口6379
daemonize yes #设置redis启动为后台守护进程
pidfile /usr/local/redis-6.2.6/logs/redis_6379.pid #pidfile的路径
loglevel notice #日志级别
logfile /usr/local/redis-6.2.6/logs/redis_6379.log #日志文件的路径
dir /usr/local/redis-6.2.6/data/ #持久化数据存放的目录
databases 16 #数据库的个数,默认16个
requirepass 123456 #设置客户端登陆密码
[root@redis redis-6.2.6]#
启动redis服务
cd /usr/local/redis-6.2.6/bin/
#启动redis服务并指定配置文件
./redis-server /usr/local/redis-6.2.6/etc/redis.conf
#查看6379端口,正常监听即可
lsof -i:6379
问题排查
#第一次启动redis可能会看到日志报下面的3个警告:
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
WARNING: overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
WARNING: you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with redis. To fix thisissue run the command ‘echo never > /sys/kernel/mm/transparent_hugepage/enabled’ as root, and add it to your /etc/rc.local in order to retain thesetting after a reboot. redis must be restarted after THP is disabled.
按照提示解决即可:
vim /etc/sysctl.conf #打开/etc/sysctl.conf文件,添加下面2行
net.core.somaxconn = 1024 #指定内核参数,默认值128对于负载很大的服务是不够的,改为1024或2048或者更大
vm.overcommit_memory = 1 #内存的分配策略,设置为1表示允许内核分配所有的物理内存
修改完成后保存,执行: sysctl -p 使修改立即生效
使用root账号执行:echo never > /sys/kernel/mm/transparent_hugepage/enabled
为了防止重启服务器失效,将echo never > /sys/kernel/mm/transparent_hugepage/enabled 添加到/etc/rc.local开机自启中即可。
客户端登陆redis
redis-cli就是redis服务的客户端工具,使用该工具登陆redis服务端即可:
cd /usr/local/redis-6.2.6/bin/
#指定IP、端口连接
./redis-cli -h 192.168.1.1 -p 6379
192.168.1.1:6379> auth 123456 #使用auth命令来输入密码
OK
192.168.1.1:6379> info #查看redis的信息
总结
1、安装依赖插件
yum install -y cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make
2、下载、解压、编译、安装
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
tar -zxvf redis-6.2.6.tar.gz
cd redis-6.2.6/
#编译, -j表示开启4个cpu同时编译
make -j 4
#创建一个目录,作为redis安装目录
mkdir /usr/local/redis-6.2.6
#正式安装redis,加PREFIX参数指定redis安装到/usr/local/redis-6.2.6
#如果不加的话默认安装命令就会生成到/usr/local/bin下
make PREFIX=/usr/local/redis-6.2.6 install
3、创建目录(为了规范化)
cd /usr/local/redis-6.2.6
#创建etl目录,存放redis配置文件
mkdir etc
#创建logs目录,存放redis日志文件
mkdir logs
#创建data目录,存放redis持久化化数据
mkdir data
4、复制配置文件
#复制源码包里的配置文件到etc目录
cp /redis-6.2.6/redis.conf /usr/local/redis-6.2.6/etc/
5、修改配置文件
cd /usr/local/redis-6.2.6/etc/
[root@redis etc]# vim redis.conf #主要启动或修改下面这些参数即可
bind 0.0.0.0 #设置绑定本机哪些IP,0.0.0.0表示本机全部可用IP,建议设置本机IP即可
port 6379 #redis的默认端口6379
daemonize yes #设置redis启动为后台守护进程
pidfile /usr/local/redis-6.2.6/logs/redis_6379.pid #pidfile的路径
loglevel notice #日志级别
logfile /usr/local/redis-6.2.6/logs/redis_6379.log #日志文件的路径
dir /usr/local/redis-6.2.6/data/ #持久化数据存放的目录
databases 16 #数据库的个数,默认16个
requirepass 123456 #设置客户端登陆密码
6、启动redis-server
cd /usr/local/redis-6.2.6/bin/
#启动redis服务并指定配置文件
./redis-server /usr/local/redis-6.2.6/etc/redis.conf
#查看6379端口
lsof -i:6379
7、使用客户端工具redis-cli进行连接
#指定IP、端口进行连接
cd /usr/local/redis-6.2.6/bin/
./redis-cli -h 192.168.1.1 -p 6379
192.168.1.1:6379> auth 123456 #进入redis后,使用auth命令来输入密码登陆
OK