首页 > 数据库 >Redis

Redis

时间:2022-10-27 09:46:08浏览次数:40  
标签:127.0 6379 0.1 Redis redis cluster data

1.Redis官网

redis.io

2.操作流程

2.1下载版本5.0.14

cd /data/
#下载
wget https://download.redis.io/releases/redis-5.0.14.tar.gz
#解压
tar xf redis-5.0.14.tar.gz
mv redis-5.0.14 /usr/local/redis

2.2安装

cd /usr/local/redis/
make

2.3配置环境变量

cat>>/etc/profile<<'EOF' 
export PATH=/usr/local/redis/src:$PATH
EOF
tail -1 /etc/profile 
source /etc/profile 
echo $PATH

#安装部分工具
cd /usr/local/redis/src

[root@localhost src]# make install
    CC Makefile.dep

Hint: It's a good idea to run 'make test' ;)

    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install

2.4启动redis

#后台启动
redis-server &

#检查端口
[root@localhost ~]# netstat -lntup|grep 6379  
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      23805/redis-server  
tcp6       0      0 :::6379                 :::*                    LISTEN      23805/redis-server 

2.5连接测试

[root@localhost ~]# redis-cli
127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> get a
"1"

2.6Redis基本管理操作

2.6.1基础配置文件

1)创建数据文件目录
mkdir /data/6379 -p
2)生成配置文件
cat > /data/6379/redis.conf<<EOF
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dump.rdb
EOF

cat /data/6379/redis.conf 
3) 配置文件说明
daemonize yes               #是否后台运行
port 6379                   #默认端口
logfile /var/log/redis.log  #日志文件位置
dir /data/6379              #持久化文件存储位置
dbfilename dump.rdb         #RDB持久化数据文件
4) 重启
#关闭
redis-cli shutdown 
#启动
redis-server /data/6379/redis.conf 
netstat -lnp|grep 6379

测试:
[root@oldboy redis]# redis-cli 
127.0.0.1:6379> set name gxf
OK
127.0.0.1:6379> get name
"gxf"
127.0.0.1:6379> exit

2.6.2使用systemd管理redis

1)关闭
redis-cli shutdown
2)创建用户并授权
useradd redis -M -s /sbin/nologin
chown -R redis:redis /data/63*
3)生成启动文件
cat >/usr/lib/systemd/system/redis6379.service<<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/redis/src/redis-server /data/6379/redis.conf --supervised systemd
ExecStop=/usr/local/redis/src/redis-cli shutdown
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target
EOF
4)设置开机自启动,并启动检查
[root@db01 redis]# systemctl enable redis6379
[root@db01 redis]# systemctl start redis6379
[root@db01 redis]# netstat -lntup|grep 637
tcp        0      0 0.0.0.0:6379  0.0.0.0:* LISTEN      6832/redis-server * 
tcp6       0      0 :::6379       :::*      LISTEN      6832/redis-server * 

2.6.3 redis安全配置

redis默认开启了保护模式,只允许本地回环地址登录并访问数据库。

protected-mode yes #保护模式,是否只允许本地访问

取消:CONFIG SET protected-mode no

可以通过指定ip或者设置密码解决

(1)Bind :指定IP进行监听

vim /data/6379/redis.conf
bind 192.168.122.152  127.0.0.1

(2)增加requirepass {password}

vim /data/6379/redis.conf
requirepass 123

检查配置文件

[root@localhost ~]# cat /data/6379/redis.conf
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dump.rdb
bind 192.168.122.152  127.0.0.1
requirepass 123

重启

[root@localhost ~]# redis-cli shutdown
[root@localhost ~]# redis-server /data/6379/redis.conf

验证密码

方法1

[root@localhost ~]# redis-cli -a 123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set b 1
OK
127.0.0.1:6379> get b
"1"

方法2

[root@localhost ~]# redis-cli
127.0.0.1:6379> set c 1
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123
OK
127.0.0.1:6379> set c 1
OK
127.0.0.1:6379> get c
"1"

2.6.4 在线查看和修改参数

参数修改:
1)配置文件。

2)在线查看和修改参数

在线查看

CONFIG GET *
CONFIG GET pro*

在线设置密码:

config set requirepass hc123456

2.7 redis持久化

redis持久化方式:RDB、AOF

1)RDB持久化

​ 在指定时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
​ 优点:速度快,适合于用做备份,主从复制也是基于RDB持久化功能实现的。
​ 缺点:会有数据丢失

rdb持久化核心配置参数:
vim /data/6379/redis.conf
dir /data/6379
dbfilename dump.rdb

save 900 1
save 300 10
save 60 10000

---
配置分别表示:
900秒(15分钟)内有1个更改
300秒(5分钟)内有10个更改
60秒内有10000个更改

2)AOF持久化(append-only log file)

​ 记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。
​ AOF文件中的命令全部以Redis协议格式来保存,新命令会被追加到文件的末尾。
​ 优点:可以最大程度保证数据不丢
​ 缺点:日志记录量级比较大

配置:
vim /data/6379/redis.conf
appendonly yes
appendfsync everysec 

3. redis cluster 搭建

3.1 介绍

实现高性能

1.在多分片redis节点中,将16384个内存槽位,均匀分布到多个Redis分片节点中。

2.存数据时,将key做crc16(key)计算生成一个数字,然后和16384进行取模,得出槽位值(0-16383之间)。

3.根据计算得出的槽位值,找到相对应的分片节点的主节点,到相应槽位上存取数据。

4.如果客户端当时连接的节点不是将来要存储的分片节点,分片集群会将客户端连接切换至真正存储节点进行数据存储

高可用

1.在搭建集群时,会为每一个分片的主节点,对应一个从节点,实现slaveof的功能。

2.同时当主节点宕机,实现类似于sentinel的自动failover功能,所有分片节点参与投票选举。

3.redis会有多组分片构成(一般至少3组)。

4.redis cluster使用固定个数slot存储数据(一共16384个slot)

5.每组分片节点分得1/3槽位,slot个数分别(0-5500/5501-11000/11001-16383)

6.基于CRC16(key)%16384计算的值,对应相应的槽位号存取数据。

3.2 搭建过程

1)规划

  • 6个redis实例,放到3台硬件服务器。

    • 注:一组redis分片的主从节点要分到不同物理机,防止硬件主机宕机造成的整个分片数据丢失。
  • 端口号:7000-7005共6个节点

2)配置

#创建各节点数据目录
mkdir /data/700{0..5}

#导入各节点配置文件
cat > /data/7000/redis.conf <<EOF
port 7000
daemonize yes
pidfile /data/7000/redis.pid
loglevel notice
logfile "/data/7000/redis.log"
dbfilename dump.rdb
dir /data/7000
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF

cat >> /data/7001/redis.conf <<EOF
port 7001
daemonize yes
pidfile /data/7001/redis.pid
loglevel notice
logfile "/data/7001/redis.log"
dbfilename dump.rdb
dir /data/7001
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF

cat >> /data/7002/redis.conf <<EOF
port 7002
daemonize yes
pidfile /data/7002/redis.pid
loglevel notice
logfile "/data/7002/redis.log"
dbfilename dump.rdb
dir /data/7002
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF


cat >>  /data/7003/redis.conf <<EOF
port 7003
daemonize yes
pidfile /data/7003/redis.pid
loglevel notice
logfile "/data/7003/redis.log"
dbfilename dump.rdb
dir /data/7003
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF


cat >> /data/7004/redis.conf <<EOF
port 7004
daemonize yes
pidfile /data/7004/redis.pid
loglevel notice
logfile "/data/7004/redis.log"
dbfilename dump.rdb
dir /data/7004
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF

cat >> /data/7005/redis.conf <<EOF
port 7005
daemonize yes
pidfile /data/7005/redis.pid
loglevel notice
logfile "/data/7005/redis.log"
dbfilename dump.rdb
dir /data/7005
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF

3)启动各节点

redis-server /data/7000/redis.conf 
redis-server /data/7001/redis.conf 
redis-server /data/7002/redis.conf 
redis-server /data/7003/redis.conf 
redis-server /data/7004/redis.conf 
redis-server /data/7005/redis.conf 
[root@localhost ~]# ps -ef|grep redis|grep 700
root      9242     1  0 10:08 ?        00:00:00 redis-server *:7000 [cluster]
root      9244     1  0 10:08 ?        00:00:00 redis-server *:7001 [cluster]
root      9246     1  0 10:08 ?        00:00:00 redis-server *:7002 [cluster]
root      9254     1  0 10:08 ?        00:00:00 redis-server *:7003 [cluster]
root      9262     1  0 10:08 ?        00:00:00 redis-server *:7004 [cluster]
root      9268     1  0 10:08 ?        00:00:00 redis-server *:7005 [cluster]

4) 节点加入集群管理

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1

#--replicas 1 是每个分片从节点的个数

5) 运行结果

image-20220915101849902

6)集群主从结果查看

集群主节点状态
[root@localhost ~]# redis-cli -p 7000 cluster nodes | grep master

集群从节点状态
[root@localhost ~]# redis-cli -p 7000 cluster nodes | grep slave

3.3 集群的节点管理

1)增加新的节点

增加主节点
[root@localhost ~]# redis-cli --cluster  add-node 127.0.0.1:7006 127.0.0.1:7000
已知节点放在后面

讲7007设置为7006的从节点
[root@localhost ~]# redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7000 --cluster-slave

2)手动分配slots

  • 因为redis 5现在还不支持自动平衡slot,所以需要自行计算需要移动的slot数量,并手动执行命令
redis-cli --cluster reshard 127.0.0.1:7000 --cluster-from 3fc495b14e672aeedc1f86dc0d2c5962d2337978 --cluster-to cd42bc4322f00c76266745b3bc841b439e7e1ca1 --cluster-slots 1365 --cluster-yes
 
redis-cli --cluster reshard 127.0.0.1:7000 --cluster-from aa699303ec27f88ad93b86cbaf42e45b43c3629c --cluster-to cd42bc4322f00c76266745b3bc841b439e7e1ca1 --cluster-slots 1365 --cluster-yes
 
redis-cli --cluster reshard 127.0.0.1:7000 --cluster-from 035da4af8c25e6fe5eb50d95b9c26a630f9ae0cf --cluster-to cd42bc4322f00c76266745b3bc841b439e7e1ca1 --cluster-slots 1365 --cluster-yes
  • 检查分配结果
[root@localhost ~]#  redis-cli -p 7000 cluster nodes | grep master
035da4af8c25e6fe5eb50d95b9c26a630f9ae0cf 127.0.0.1:7002@17002 master - 0 1663210343000 3 connected 12288-16383
3fc495b14e672aeedc1f86dc0d2c5962d2337978 127.0.0.1:7000@17000 myself,master - 0 1663210343000 1 connected 1365-5460
cd42bc4322f00c76266745b3bc841b439e7e1ca1 127.0.0.1:7006@17006 master - 0 1663210343000 8 connected 0-1364 5461-6825 10923-12287
aa699303ec27f88ad93b86cbaf42e45b43c3629c 127.0.0.1:7001@17001 master - 0 1663210343000 2 connected 6826-10922

3)移除节点

#先找出所有主节点的信息

[root@localhost ~]#  redis-cli -p 7000 cluster nodes | grep master
035da4af8c25e6fe5eb50d95b9c26a630f9ae0cf 127.0.0.1:7002@17002 master - 0 1663210343000 3 connected 12288-16383
3fc495b14e672aeedc1f86dc0d2c5962d2337978 127.0.0.1:7000@17000 myself,master - 0 1663210343000 1 connected 1365-5460
cd42bc4322f00c76266745b3bc841b439e7e1ca1 127.0.0.1:7006@17006 master - 0 1663210343000 8 connected 0-1364 5461-6825 10923-12287
aa699303ec27f88ad93b86cbaf42e45b43c3629c 127.0.0.1:7001@17001 master - 0 1663210343000 2 connected 6826-10922

  • 此时7006节点用了0-1364 5461-6825 10923-12287槽位

执行命令

redis-cli --cluster reshard 127.0.0.1:7006

image-20220915111022072

How many slots do you want to move (from 1 to 16384)? 4096 ##一共转移多少个槽位16384/分片个数
What is the receiving node ID?   65f2a7d26a8a1f9da54eef8eea04ca4716b327b3   #新加的主 7006
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1:all ##从哪些分片节点获取槽位

#一次恢复一个节点的槽位,

检查删除结果

[root@localhost ~]# redis-cli -p 7000 cluster nodes | grep master
035da4af8c25e6fe5eb50d95b9c26a630f9ae0cf 127.0.0.1:7002@17002 master - 0 1663211539000 13 connected 10923-16383
3fc495b14e672aeedc1f86dc0d2c5962d2337978 127.0.0.1:7000@17000 myself,master - 0 1663211539000 11 connected 0-5460
cd42bc4322f00c76266745b3bc841b439e7e1ca1 127.0.0.1:7006@17006 master - 0 1663211540000 8 connected
aa699303ec27f88ad93b86cbaf42e45b43c3629c 127.0.0.1:7001@17001 master - 0 1663211539971 12 connected 5461-10922

3.4 设置redis最大内存和最大连接数

config set maxmemory 102400000

127.0.0.1:6379> CONFIG GET maxmemory

  1. "maxmemory"
  2. "0" ###默认使用物理内存,用多大就占多大。

config set maxclients 16384 #最大连接数

127.0.0.1:6379> CONFIG GET maxmemory
5) "maxclients"
6) "4064" #默认4096

标签:127.0,6379,0.1,Redis,redis,cluster,data
From: https://www.cnblogs.com/anslinux/p/16831018.html

相关文章

  • 一篇文章带你了解NoSql数据库——Redis简单入门
    一篇文章带你了解NoSql数据库——Redis简单入门Redis是一个基于内存的key-value结构数据库我们会利用其内存存储速度快,读写性能高的特点去完成企业中的一些热门数据的储......
  • Redis持久化的研究---AOF
    Redis持久化的研究Redis的持久化的方式----AOF在redis中存在一个日志文件(aof日志),此日志文件中保存着在redis中执行的有效的命令;当需要进行数据恢复时就会加载该文件......
  • AgileBoot - 如何集成内置数据库H2和内置Redis
    本项目地址:github:https://github.com/valarchie/AgileBoot-Back-Endgitee:https://gitee.com/valarchie/AgileBoot-Back-End本项目说明:AgileBoot-基于SpringBoo......
  • Java连接Redis
    Java连接RedisRedis(RemoteDictionaryServer),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语......
  • zk,kafka,redis哨兵,mysql容器化
    1.zookeeper,kafka容器化1.1zookeeper+kafka单机docker模式dockerpullbitnami/zookeeper:3.6.3-debian-11-r46dockerpullbitnami/kafka:3.1.1-debian-11-r36dock......
  • Redis快速入门
    认识NoSQL什么是NOSQLNoSQL最常见的解释是"non-relational",很多人也说它是"NotOnlySQL"NoSQL仅仅是一个概念,泛指非关系型的数据库区别于关系数据库,它们不保证关系......
  • 京东云开发者| Redis数据结构(二)-List、Hash、Set及Sorted Set的结构实现
    1引言之前介绍了Redis的数据存储及String类型的实现,接下来再来看下List、Hash、Set及SortedSet的数据结构的实现。2ListList类型通常被用作异步消息队列、文章列表查......
  • Redis安装与使用
     Redis官方是不支持windows的,只是 MicrosoftOpenTechgroup在GitHub上开发了一个Win64的版本,项目地址是:https://github.com/MSOpenTech/redis  【换机器重新......
  • Linux 安装 Redis
    安装Redis5.0.4下载,解压,编译:wgethttp://download.redis.io/releases/redis-tarxzfredis-5.0.4.tar.gzcdredis-5.0.4make二进制文件是编译完成后在src目录下.......
  • docker swarm快速部署redis分布式集群
    环境准备四台虚拟机192.168.2.38(管理节点)192.168.2.81(工作节点)192.168.2.100(工作节点)192.168.2.102(工作节点)时间同步每台机器都执行yuminstall-yntpcat<<EO......