赞
踩
☆ redis之安装部署
☆ redis之基本使用
☆ redis之应用场景
☆ redis之源码制作rpm包
安装文档: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
ps aux | grep -E 'redis|USER'
1、Slave启动成功连接到master后会发送一个sync命令
2、Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,
3、在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
4、全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
5、增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
6、但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
每个Redis群集节点都需要打开两个TCP连接。
1)用于为客户端提供服务的普通Redis命令执行端口,例如6379。
2)集群总线端口偏移是固定的,始终为10000,例如16379。(该端口用于集群总线,即使用二进制协议的节点到节点通信通道。节点使用集群总线进行故障检测,配置更新,故障转移授权等。客户端永远不应尝试与群集总线端口通信,但始终使用正常的Redis命令端口,但请确保在防火墙中打开两个端口,否则Redis群集节点将无法通信。)
Redis Cluster不使用一致的散列,而是使用不同形式的分片,其中每个键在概念上都是我们称之为散列槽的一部分。
Redis集群中有16384个散列槽,为了计算给定密钥的散列槽,我们只需采用密钥模数16384的CRC16。
Redis群集中的每个节点都负责哈希槽的子集,例如,您可能拥有一个包含3个节点的群集,其中:
节点A包含从0到5500的散列槽。
节点B包含从5501到11000的散列槽。
节点C包含从11001到16383的散列槽。
redis-benchmark
:性能测试工具,可以在自己本子运行,看看自己本子性能如何。
redis-check-aof
:修复有问题的AOF文件,rdb 和 aof 后面讲。
redis-check-dump
:修复有问题的 dump.rdb 文件。
redis-sentinel
:redis集群使用。
redis-server
:redis服务启动命令。
redis-cli
:客户端,操作入口。
[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区
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(驱逐) :禁止驱逐数据
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。