redis之安装部署

2023-10-27

☆ 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(驱逐) :禁止驱逐数据

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis之安装部署 的相关文章

  • 每个进程每个线程的时间量

    我有一个关于 Windows 和 Linux 中进程和线程的时间量子的问题 我知道操作系统通常为每个线程提供固定的时间量 我知道时间量根据前台或后台线程而变化 也可能根据进程的优先级而变化 每个进程有固定的时间量吗 例如 如果操作系统为每个
  • sleep 0 有特殊含义吗?

    我看到很多用法sleep 0在我的一个客户项目中 代码看起来像这样 while true sleep 0 end 阅读一些像这样的答案this https stackoverflow com questions 3727420 signif
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 如何通过替换为空页映射来取消映射 mmap 文件

    Linux 用户空间有没有办法用空页面 映射自 dev null 或者可能是一个空页面 重复映射到从文件映射的页面的顶部 对于上下文 我想找到这个 JDK bug 的修复 https bugs openjdk java net browse
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while

随机推荐