Redis是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
redis默认有16个数据库,默认使用第0个数据库,他可以作用为数据库,缓存,消息中间件。
[root@loaclhost redis]# grep 'databases' conf/6379.conf
databases 16
redis是单线程的,redis速度非常快,官方表示redis是基于内存操作,redis的瓶颈是根据内存和网络带宽来决定。redis将所有数据存放在内存的,所以使用单线程去操作效率更高。多线程cpu会切换上下文,所以会耗时。
Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我选择redis-5.0.13.tar.gz
#下载地址
https://redis.io/download/
#创建文件夹上传安装包
[root@localhost ~]# mkdir -p /opt/soft/redis && cd /opt/soft/redis
# 查看包是否上传成功
[root@localhost /opt/soft/redis]# ll
总用量 1952
-rw-r--r-- 1 root root 1995566 1月 16 09:20 redis-5.0.13.tar.gz
#解压并切换到解压后的目录
[root@localhost /opt/soft/redis]# tar -zxvf redis-5.0.13.tar.gz
[root@localhost /opt/soft/redis]# cd redis-5.0.13
yum -y install gcc-c++
#创建目录,存放安装后的文件
mkdir /usr/local/redis
#指定目录安装
make PREFIX=/usr/local/redis install
#编译并安装
make && make install
#创建目录
mkdir /usr/local/redis/conf
#复制配置文件到/usr/local/redis/conf
cp /opt/soft/redis/redis-5.0.13/redis.conf /usr/local/redis/conf/redis.conf
#查看redis默认配置
[root@localhost ~]# grep -v '^#' /usr/local/redis/conf/redis.conf | grep -v '^$'
bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
修改配置文件
[root@localhost ~]# vim /usr/local/redis/conf/redis.conf
bind 0.0.0.0 #修改后才能让本机所有ip都可以进行登录
protected-mode yes
port 6379 #端口号
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes #是否后台运行,默认是no,需要改成yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./ #数据持久化保存路径
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
启动redis
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
可以加可以不加,不加就按照上面的方式进行启动
cp /opt/soft/redis/redis-5.0.13/utils/redis_init_script /etc/init.d/redis
#修改启动文件的配置文件路径
sed -ri 's#EXEC=/usr/local/bin/redis-server#EXEC=/usr/local/redis/bin/redis-server#g' /etc/init.d/redis
sed -ri 's#CLIEXEC=/usr/local/bin/redis-cli#CLIEXEC=/usr/local/redis/bin/redis-cli#g' /etc/init.d/redis
sudo sed -ri 's#CONF="/etc/redis/\$\{REDISPORT\}\.conf"#CONF="/usr/local/redis/conf/redis.conf"#' /etc/init.d/redis
#授权
chmod +x /etc/init.d/redis
chkconfig --add redis
chkconfig redis on
#重新装载
systemctl daemon-reload
#启动,如果之前有启动,需要先停止
systemctl start redis
./redis-benchmark #用于进行redis性能测试工具
./redis-check-dump #用于修复备份数据文件
./redis-cli #redis的客户端
./redis-server #redis服务端
./redis-check-aof #修复出问题的AOF文件
./redis-sentinel #用于集群管理
[root@localhost ~]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> ping #测试是否连接成功
PONG #代表连接成功
127.0.0.1:6379> set name heber #设置一个key并赋值
OK
127.0.0.1:6379> get name #获取一个key
"heber"
127.0.0.1:6379>quit #退出登录
#测试100个并发,100000个请求
[root@localhost ~]# /usr/local/redis/bin/redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000
127.0.0.1:6379> select 1 #切换到1号库
OK
127.0.0.1:6379[1]>
127.0.0.1:6379> dbsize
(integer) 0 #0表示没有
127.0.0.1:6379> set name heber
OK
127.0.0.1:6379> dbsize
(integer) 1 #1表示存在一个
127.0.0.1:6379>
127.0.0.1:6379[1]> keys *
1) "name"
127.0.0.1:6379[1]>
127.0.0.1:6379> set name heber
OK
127.0.0.1:6379> get name
"heber"
flushall
flushdb
127.0.0.1:6379> exists name
(integer) 1 #1代表存在
127.0.0.1:6379> keys *
1) "name"
2) "mylist"
127.0.0.1:6379> move mylist 2
(integer) 1 #1代表移除一个成功
127.0.0.1:6379> expire name 10 #10代表10秒
(integer) 1
127.0.0.1:6379> ttl name #查看过期时间
(integer) 2 #还有2秒过期
127.0.0.1:6379> ttl name
(integer) -2 #-2代表已过期
127.0.0.1:6379> type name
string #数据类型为string
127.0.0.1:6379> info replication
# Replication
role:master #当前角色
connected_slaves:0 #从机
#引入其他文件
include /path/to/other.conf
#加载一些so文件
loadmodule /path/to/other_module.so
#网络配置,绑定自己的ip
bind 127.0.0.1
#是否受保护,默认打开
protected-mode yes
#设置端口号
port 6379
#tcp连接
tcp-backlog 511
timeout 0
tcp-keepalive 300
#是否守护进程开启,默认是no
daemonize yes
#管理守护进程
supervised no
#配置pid,如果以后台形式运行就需要指定pid
pidfile /var/run/redis_6379.pid
#设置日志级别
loglevel notice
#日志生成的文件位置名
logfile ""
#默认数据库数量
databases 16
#是否显示logo
always-show-logo yes
#快照,在指定时间内执行了多少次操作,会写入持久化文件.rdb
save 900 1
save 300 10
save 60 10000
#持久化出错后是否继续工作
stop-writes-on-bgsave-error yes
#是否压缩rdb文件
rdbcompression yes
#是否校验,如果出错自动修复
rdbchecksum yes
#
dbfilename dump.rdb
#rdb保存目录
dir ./
#主从复制
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
#设置密码
requirepass foobared
#客户的限制
maxclients 10000
#内存设置
maxmemory <bytes>
#是否开启aof
appendonly no
#持久化名
appendfilename "appendonly.aof"
#每秒执行一次
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
redis是内存数据库,如果不将内存中的数据状态保存在磁盘,那么一旦退出进程,数据库中数据也会消失,所以redis提供了持久化。开启持久化后,重启redis后,数据会自动通过持久化文件恢复。
redis的持久化有两种:
RDB rdb是在不同的时间点,将redis存储的数据生成快照存储到磁盘等介质上。优缺点:周期性的,不影响数据写入,高效,完整性差。RDB默认开着 AOF aof是将redis执行过程中所有指令记录在日志中,在下次redis重新启动时,只要把这些命令全部重新执行一下就可以实现数据恢复。优缺点:实时性,完整性好,体积大。默认关闭
rdb默认是打开的,通过配置文件可以查看备份的频率,达到频率才会备份
vim /usr/local/redis/conf/redis.conf
#备份的频率
save 900 1 #15分钟最少有几个key改变
save 300 10 #5分钟最少有10key改变
save 60 10000 #1分钟最少有1W个key改变
#备份的文件名称
dbfilename dump.rdb
#数据持久化保存路径,没有需要创建
dir /usr/local/redis/data
# 启用压缩(节省空间,轻微性能损耗)
rdbcompression yes
# 写入校验和(数据完整性验证)
rdbchecksum yes
# 后台保存失败时禁止写入(保障数据安全)
stop-writes-on-bgsave-error yes
手动进行备份
127.0.0.1:6379> save
数据还原需要先停掉redis服务。然后将备份文件存放在备份目录中即可
vim /usr/local/redis/conf/redis.conf
#由于AOF默认关闭所以需要打开
appendonly yes
#备份文件名
appendfilename "appendonly.aof"
# 与 RDB 共用目录,需确保权限正确
dir /usr/local/redis/data
# 推荐值,平衡性能与安全性
appendfsync everysec
数据还原需要先停掉redis服务。然后将备份文件存放在备份目录中即可
#这里的环境
192.168.47.130 #master
192.168.47.141 #slave
192.168.47.142 #slave
vim /usr/local/redis/conf/redis/6379.conf
bind 0.0.0.0
#关闭保护模式
protected-mode no
vim /etc/redis/6379.conf
#5版本使用这个
replicaof 192.168.47.130 6379
#5以下使用这个
slaveof 192.168.47.130 6379
bind 0.0.0.0
protected-mode no
#查看主从是否正常
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2 #这里显示两台从服务下面显示分别是141和142
slave0:ip=192.168.47.142,port=6379,state=online,offset=168,lag=1
slave1:ip=192.168.47.141,port=6379,state=online,offset=168,lag=1
master_replid:7eb964b0eee9b0cb08b50a2f751449b33d2ca211
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:168
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:168
#从服务只是用get name
[root@localhost ~]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> set name heber
OK
127.0.0.1:6379> get name
"heber"
Redis 哨兵是 Redis 官方提供的 高可用性解决方案,用于监控、管理和自动修复 Redis 主从架构中的故障,解决单点故障问题。它的核心目标是 实现 Redis 主从架构的自动故障转移(Failover),确保服务持续可用。
bind 0.0.0.0
#复制哨兵配置文件,从源码包中复制
cp /opt/soft/redis/redis-5.0.13/sentinel.conf /usr/local/redis/conf/sentinel.conf
#编辑配置文件
vim /usr/local/redis/conf/sentinel.conf
port 26379
#主服务器ip
sentinel monitor mymaster 192.168.47.130 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 10000
从服务器中添加
vim /usr/local/redis/conf/sentinel.conf
/usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/sentinel.conf
Redis 集群是 Redis 官方提供的分布式解决方案,通过将数据分片(Sharding)存储在多个节点上,实现高可用性、横向扩展和负载均衡。它解决了单机 Redis 在内存容量、性能和高可用性上的限制。
3主3从
编号 | 主机名称 | ip地址 | 角色 |
---|---|---|---|
1 | redis1 | 192.168.0.130 | redis7001 |
2 | redis1 | 192.168.0.130 | redis7002 |
3 | redis2 | 192.168.0.131 | redis7003 |
4 | redis2 | 192.168.0.131 | redis7004 |
5 | redis3 | 192.168.0.132 | redis7005 |
6 | redis3 | 192.168.0.132 | redis7006 |
参考前面的安装即可,但是配置文件名称有变,在/usr/local/redis/conf/下创建以下文件
redis1 => redis7001.conf/redis7002.conf
redis2 => redis7003.conf/redis7004.conf
redis3 => redis7005.conf/redis7006.conf
配置文件
bind 0.0.0.0 #修改后才能让本机所有ip都可以进行登录
port 7001 #端口号,对应每一个配置文件
cluster-enabled yes #开启集群
cluster-config-file nodes_7001.conf
cluster-node-timeout 5000
daemonize yes #是否后台运行,默认是no,需要改成yes
dbfilename dump.rdb #rdb持久化
dir /usr/local/redis/data #数据持久化保存路径
pidfile /var/run/redis_7001.pid #进程id
appendonly yes #aof持久化
appendfilename "appendonly.aof"
appendfsync everysec
protected-mode no #关闭保护模式
tcp-backlog 511
timeout 0
tcp-keepalive 300
supervised no
loglevel notice
logfile ""
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
启动这6个节点的redis
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis700x.conf
/usr/local/redis/bin/redis-cli --cluster create 192.168.0.130:7001 192.168.0.131:7004 192.168.0.132:7006 192.168.0.132:7005 192.168.0.131:7003 192.168.0.130:7002 --cluster-replicas 1
/usr/local/redis/bin/redis-cli -c -h 主节点ip -p 7001
set name heber
/usr/local/redis/bin/redis-cli -c -h 192.168.0.130 -p 7001 shutdown
/usr/local/redis/bin/redis-cli -c -h 192.168.0.130 -p 7002 shutdown
/usr/local/redis/bin/redis-cli -c -h 192.168.0.131 -p 7003 shutdown
/usr/local/redis/bin/redis-cli -c -h 192.168.0.131 -p 7004 shutdown
/usr/local/redis/bin/redis-cli -c -h 192.168.0.133 -p 7005 shutdown
/usr/local/redis/bin/redis-cli -c -h 192.168.0.133 -p 7006 shutdown
#依次启动即可
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis700x.conf
评论