文章目录
Redis简介
Redis 简介
Redis是一种支持key-value等多种数据结构完全开源免费的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。主要提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。
Redis 与其他 key-value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
性能极高:Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型: Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子特性:Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
丰富的特性: Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储差异化
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。
Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
引用官方:http://www.redis.net.cn/tutorial/3502.html
丰富的额外功能
- 提供了键过期功能,可以用来实现缓存;
- 提供了发布订阅功能,可以用来实现消息系统;
- 支持Lua脚本功能,可以利用Lua创造出新的Redis命令;
- 提供了简单事务功能,能在一定程度上保证事务特性;
- 提供了流水线(Pipeline)功能,可以将一批命令一次性传到Redis,减少网络开销。
Redis使用场景
基于Redis丰富的特性,Redis可适用于多种场景,主要有如下:
- 缓存:合理使用缓存不仅能加快数据访问,还能有效降低后端数据源的压力。
- 排行榜系统:Redis可适用于各种复杂维度的场景,能提供列表和有序集合的数据结构,可快速方便构建各种排行榜系统。
- 计数器应用:Redis天然支持计数功能。
- 社交网络:Redis提供的数据结构能容易的实现各种社交网络的必备及常见功能。
- 消息队列系统:Redis提供了发布订阅功能和阻塞队列功能,可满足一般的消息队列需求。
Redis安装
前置准备
[root@redis01 ~]# echo "vm.overcommit_memory=1" > /etc/sysctl.d/redis-sysctl.conf
[root@redis01 ~]# sysctl -p /etc/sysctl.d/redis-sysctl.conf
[root@redis01 ~]# echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local
[root@redis01 ~]# yum -y install gcc gcc-c++
提示:如上为redis建议的优化项,具体释义及更多优化项可参考:Redis的Linux系统优化。
[root@redis01 ~]# vi /etc/hosts
……
172.24.8.xx redis01
172.24.8.xx redis02
172.24.8.xx redis03
172.24.8.xx redisclient
……
提示:为便于后续试验,根据实际情况直接添加相应IP主机解析至所有节点,本实验使用4台主机,最后一台规划为Redis客户端。
Linux编译安装
[root@redis01 ~]# mkdir -p /tmp/redis-tmp
[root@redis01 ~]# REIDS_VER=8.0.3
[root@redis01 ~]# DOWNLOAD_URL=https://mirrors.huaweicloud.com/redis/
[root@redis01 ~]# curl -L ${DOWNLOAD_URL}/redis-${REIDS_VER}.tar.gz -o /tmp/redis-${REIDS_VER}.tar.gz
[root@redis01 ~]# tar xzvf /tmp/redis-${REIDS_VER}.tar.gz -C /tmp/redis-tmp --strip-components=1 --no-same-owner
[root@redis01 ~]# cd /tmp/redis-tmp
[root@redis01 redis-tmp]# time make -j4
[root@redis01 redis-tmp]# make install PREFIX=/usr/local/redis
[root@redis01 ~]# echo "PATH=/usr/local/redis/bin:\$PATH" >> /etc/profile.d/redis.sh
[root@redis01 ~]# source /etc/profile.d/redis.sh
[root@redis01 ~]# redis-cli -v #查看版本
redis-cli 8.0.3
提示:若编译错误,可通过make distclean && make清理上次编译残留再次编译。
Redis命令
[root@redis01 ~]# ll /usr/local/redis/bin/ #查看Redis安装后命令
可执行文件 | 作用 |
---|---|
redis-benchmark | Redis基准测试工具 |
redis-check-aof | Redis AOF持久化文件检测和修复工具 |
redis-check-rdb | Redis RDB持久化文件检测和修复工具 |
redis-cli | Redis命令行客户端 |
redis-sentinel | 启动Redis Sentinel |
redis-server | 启动Redis |
Redis启动
Redis启停
- 方式一:Redis后台启动配置方式(推荐)
[root@redis01 ~]# mkdir -p /etc/redis/ /var/lib/redis/redis01/ #创建配置文件和持久化数据保存路径
[root@redis01 ~]# cp /tmp/redis-tmp/redis.conf /etc/redis/redis01_6379.conf #复制配置文件
[root@redis01 ~]# vim /etc/redis/redis01_6379.conf #将启动方式改为后台
#……
#bind 127.0.0.1 -::1 #注释原有配置
bind 0.0.0.0 -::1 #追加此行,开启远程访问
#……
protected-mode no #修改为no
#……
daemonize yes #将启动方式改为后台
#……
dir /var/lib/redis/redis01/
#……
提示:推荐以此方式启动Redis,从而可以使用配置文件,在后台启动,并且多个Redis启动建议多个以模板复制的配置文件。
redis优雅关闭会断开与客户端的连接、生产持久化文件,强烈不建议直接使用kill关闭。
- 方式二:Redis前台默认配置文件启停
[root@redis01 ~]# redis-server #前台启动方式
ctrl+c #强制停止redis
[root@redis01 ~]# redis-cli shutdown #正常停止redis
提示:正常停止redis需要在运行窗口之外另开一个终端窗口,同时此方式无法自定义配置,通常生产环境不建议。
- 方式三:Redis前台自定配置选项启停
语法:# redis-server --configKey1 configValue1 --configKey2 configValue2
[root@redis01 ~]# redis-server --port 6380 #指定端口启动
服务管理
- 命令行服务管理
配置允许后台启动后,可通过命令行指定配置文件来启动Redis。
[root@redis01 ~]# redis-server /etc/redis/redis01_6379.conf #指定配置并后台启动
[root@redis01 ~]# ps -ef | grep redis
[root@redis01 ~]# kill -9 112713 #强制停止Redis
[root@redis01 ~]# redis-cli shutdown #正常停止redis
- 服务单元管理
通过服务单元的方式管理Redis是更推荐的方式,更符合最佳实践。
[root@redis01 ~]# vi /usr/lib/systemd/system/redis-server.service
[Unit]
Description=Redis Server Manager
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://redis.io/documentation
[Service]
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/redis01_6379.conf
ExecStop=/usr/local/redis/bin/redis-cli shutdown
#Restart=on-failure
RestartSec=5
Type=forking
[Install]
WantedBy=multi-user.target
[root@redis01 ~]# mkdir -p /run/redis
[root@redis01 ~]# systemctl daemon-reload
[root@redis01 ~]# systemctl enable redis-server.service --now
[root@redis01 ~]# systemctl status redis-server.service
- CentOS6传统方式
通过传统脚本或service方式管理。
[root@redis01 ~]# cp /root/redis-8.0.1/utils/redis_init_script /etc/init.d/redisd
[root@redis01 ~]# vi /etc/init.d/redisd
#!/bin/sh
# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database #添加此两行
……
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server #修改为正确的路径
CLIEXEC=/usr/local/redis/bin/redis-cli #修改为正确的路径
……
CONF="/etc/redis/redis01_${REDISPORT}.conf" #修改为正确配置文件
[root@redis01 ~]# chkconfig redisd on #开机启动
[root@redis01 ~]# service redisd start #启动Redis
[root@redis01 ~]# service redisd stop #停止Redis
确认验证
验证端口
[root@redis01 ~]# netstat -tlunp | grep redis #查看端口
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 7158/redis-server 1
tcp6 0 0 ::1:6379 :::* LISTEN 7158/redis-server 1
[root@redis01 ~]# redis-cli #客户端连接
127.0.0.1:6379> exit
客户端连接
客户端安装
参考服务端安装即可。
远程连接开启
客户端从其他节点管理/连接,需要服务端开启相关配置,可确认如下配置是否开启。
[root@redis01 ~]# cat /etc/redis/redis01_6379.conf #确认如下开启远程访问
#……
#bind 127.0.0.1 -::1 #注释此行
bind 0.0.0.0 -::1 #追加此行
#……
protected-mode no #修改为no
#……
daemonize yes #修改为yes
#……
[root@redis01 ~]# systemctl restart redis-server.service
提示:若要远程连接需要服务端配置文件中如下操作:
将 bind 127.0.0.1使用#注释掉,改为bind 0.0.0.0 -::1(bind配置的是允许连接的ip,默认只允许本机连接;若远程连接需注释掉,或改为0.0.0.0)
将 protected-mode yes 改为 protected-mode no(3.2之后加入的新特性,目的是禁止公网访问redis cache,增强redis的安全性)。
远程连接测试
语法:# redis-cli -h {host} -p {port} {command}
[root@redis02 ~]# redis-cli -h redis01 -p 6379 #使用host及port参数
redis01:6379> set name zhangsan
OK
redis01:6379> get name
"zhangsan"
redis01:6379> exit
[root@redis02 ~]# redis-cli -h redis01 -p 6379 get name
"zhangsan"
Redis配置文件解析
配置项
daemonize:如需要在后台运行,把该项的值改为yes;
pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址;
bind:指定redis只接收来自该IP的请求,如果不设置,那么将处理所有请求,在生产环节中最好设置该项;
port:监听端口,默认为6379;
timeout:设置客户端连接时的超时时间,单位为秒;
loglevel:等级分为4级,debug,revbose,notice和warning。生产环境下一般开启notice;
logfile:配置log文件地址,默认使用标准输出,即打印在命令行终端的端口上;
database:设置数据库的个数,默认使用的数据库是0;
save:设置redis进行数据库镜像的频率;
rdbcompression:在进行镜像备份时,是否进行压缩;
dbfilename:镜像备份文件的文件名;
dir:数据库镜像备份的文件放置的路径,通常存放持久化文件和日志文件;
slaveof:设置该数据库为其他数据库的从数据库;
masterauth:当主数据库连接需要密码验证时,在这里设定;
requirepass:设置客户端连接后进行任何其他指定前需要使用的密码;
maxclients:限制同时连接的客户端数量;
maxmemory:设置redis能够使用的最大内存;
appendonly:开启appendonly模式后,redis会把每一次所接收到的写操作都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态;
appendfsync:设置appendonly.aof文件进行同步的频率;
vm_enabled:是否开启虚拟内存支持;
vm_swap_file:设置虚拟内存的交换文件的路径;
vm_max_momery:设置开启虚拟内存后,redis将使用的最大物理内存的大小,默认为0;
vm_page_size:设置虚拟内存页的大小;
vm_pages:设置交换文件的总的page数量;
vm_max_thrrads:设置vm IO同时使用的线程数量。
参考文档:https://www.cnblogs.com/wangchunniu1314/p/6339416.html
https://www.cnblogs.com/zuidongfeng/p/8032505.htm