☆ redis之安装部署
☆ redis之基本使用
☆ redis之应用场景
☆ redis之源码制作rpm包
1、redis-6.2.12单机部署
1.1、redis-6.2.12下载安装
安装文档:https://redis.io/docs/getting-started/installation/install-redis-from-source/
下载地址:https://github.com/redis/redis
// 安装C 语言的编译环境
yum install -y centos-release-scl scl-utils-build devtoolset-8-toolchain
scl enable devtoolset-8 bash
// 测试 gcc版本
gcc --version
tar -zxvf redis-6.2.12.tar.gz
cd redis-6.2.12
// 编译
make
# make distclean
// 安装
# make install
make install PREFIX=/usr/local/redis
# make dist
cp /root/redis-6.2.12/redis.conf /etc/redis.conf
修改/etc/redis.conf里面的
# 设置外网连接;1: 将bind配置项注释
#bind 127.0.0.1
# 设置外网连接;2: 将protected-mode配置由yes修改为no
protected-mode no
# 后台运行redis
daemonize yes
# 设置密码
requirepass foobared
# 启动命令
/usr/local/redis/bin/redis-server /etc/redis.conf
1.2、查看服务进程
ps aux | grep -E 'redis|USER'
2、redis-6.2.12主从+哨兵部署
1、Slave启动成功连接到master后会发送一个sync命令
2、Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,
3、在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
4、全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
5、增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
6、但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
3、redis-6.2.12Cluster部署
1、Redis群集TCP端口
每个Redis群集节点都需要打开两个TCP连接。
1)用于为客户端提供服务的普通Redis命令执行端口,例如6379。
2)集群总线端口偏移是固定的,始终为10000,例如16379。(该端口用于集群总线,即使用二进制协议的节点到节点通信通道。节点使用集群总线进行故障检测,配置更新,故障转移授权等。客户端永远不应尝试与群集总线端口通信,但始终使用正常的Redis命令端口,但请确保在防火墙中打开两个端口,否则Redis群集节点将无法通信。)
1、Redis群集数据分片
Redis Cluster不使用一致的散列,而是使用不同形式的分片,其中每个键在概念上都是我们称之为散列槽的一部分。
Redis集群中有16384个散列槽,为了计算给定密钥的散列槽,我们只需采用密钥模数16384的CRC16。
Redis群集中的每个节点都负责哈希槽的子集,例如,您可能拥有一个包含3个节点的群集,其中:
节点A包含从0到5500的散列槽。
节点B包含从5501到11000的散列槽。
节点C包含从11001到16383的散列槽。
4、redis提供的命令及工具
redis-benchmark
:性能测试工具,可以在自己本子运行,看看自己本子性能如何。
redis-check-aof
:修复有问题的AOF文件,rdb 和 aof 后面讲。
redis-check-dump
:修复有问题的 dump.rdb 文件。
redis-sentinel
:redis集群使用。
redis-server
:redis服务启动命令。
redis-cli
:客户端,操作入口。
5、redis配置文件
[root@michael opt]# cat ./redis.conf | grep -v '#' | grep -v ^$
daemonize yes
pidfile /var/run/redis.pid
port 6379
bind 127.0.0.1
tcp-backlog 511
timeout 0 #客户端闲置多长时间后关闭连接,默认此参数为0即关闭此功能
tcp-keepalive 0
loglevel notice #日志级别,可用的级别有debug,verbose,notice,warning
logfile "" #log文件输出位置,如果进程以守护进程的方式运行,此处又将输出文件设置为stdout的话,就会将日志信息输出到/dev/null里面去了
databases 16 #数据库的数量,默使用0库,可用select <dbid>命令在连接上指定数据库id
save 900 1 #save <seconds> <changes>指定在x时间内刷新次数达到y次会将数据同步到数据文件;
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes #指定存储至本地数据库时是否压缩文件,默认为yes即启用存储;
rdbchecksum yes
dbfilename dump.rdb #指定本地数据库文件名
dir ./ #指定本地数据文件存放位置
maxclients 128 #设置同一时间最大客户连接数,默认无限制;redis可以同时连接的客户端数为redis程序可以打开的最大文件描述符,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
requirepass footbared #客户端连接redis时需要通过AUTH<password>命令提供密码,默认关闭
slaveof <masterip> <masterport> #设置master的IP及PORT,此redis启动时自动和master进行数据同步
masterauth <master-password> #当master设置了密码保护时,slave服务连接master的密码;
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no #指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendfilename appendonly.aof #指定跟新日志文件名默认为appendonly.aof
appendfsync everysec #指定更新日志的条件,有三个可选参数no:表示等操作系统进行数据缓存同步到磁盘(快),always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全), everysec:表示每秒同步一次(折衷,默认值);
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated 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-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
maxmemory <bytes> #指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
6、redis的数据淘汰策略
MySQL 里有2000w 数据,redis 中只存20w 的数据,如何保证redis 中的数据都是热点数据?
答: Redis 内存数据集大小上升到一定大小的时候, 就会施行数据淘汰策略。
相关知识:Redis 提供6 种数据淘汰策略:
volatile-lru:从已设置过期时间的数据集( server.db[i].expires)中挑选 最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集( server.db[i].expires)中挑选将 要过期的数据淘汰
volatile-random:从已设置过期时间的数据集( server.db[i].expires)中 任意选择数据淘汰
allkeys-lru:从数据集( server.db[i].dict)中挑选 最近最少使用的数据淘汰
allkeys-random:从数据集( server.db[i].dict)中 任意选择数据淘汰
no-enviction(驱逐) :禁止驱逐数据
原文地址:https://blog.csdn.net/Michael_lcf/article/details/131465604
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_13947.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!