PostgreSQL+REDIS_FDW详细记录踩坑过程之远程操作redis(三)

准备:

 redis 以及pg都开启并都能远程访问

 1.redis  开启远程访问 

修改Redis配置文件/etc/redis/redis.conf,找到bind那行配置:

# bind 127.0.0.1

2.去掉#注释并改为:

bind 0.0.0.0

3.指定配置文件然后重启Redis服务即可。

PG远程访问开启 :https://mp.csdn.net/postedit/82854762

本地连接:

假设连接拒绝,看看是否修改了远程文件以及是否关闭了防火墙,可以使用ping命令查看是否连接能访问

 都必须要连接成功 才能继续

sql 要一行一行运行

--创建扩展
	CREATE EXTENSION redis_fdw; 

--定义新的外部服务器  https://www.postgresql.org/docs/9.4/static/sql-createserver.html
	CREATE SERVER redis_server
	FOREIGN DATA WRAPPER redis_fdw
	OPTIONS (address '192.168.31.28', port '6379');
--address  是指redis的外部地址  port是指redis的端口号  并且 服务器名字也必须是唯一的。具体的请查看pg官方文档https://www.postgresql.org/docs/9.4/static/sql-createserver.html


--定义一个新的外表  https://www.postgresql.org/docs/9.4/static/sql-createforeigntable.html
	CREATE FOREIGN TABLE redis_db0 (key text, val text)
	SERVER redis_server
	OPTIONS (database '0');

--定义一个新的用户到外部服务器的映射 http://www.postgres.cn/docs/9.4/sql-createusermapping.html
	CREATE USER MAPPING FOR PUBLIC
	SERVER redis_server
	OPTIONS (password 'secret');   

--定义一个外部表
CREATE FOREIGN TABLE myredishash (key text, val text[])
	SERVER redis_server
	OPTIONS (database '0', tabletype 'hash', tablekeyprefix 'mytable:');

运行到这  我们打开redis可视化工具 查看 发现是没有的 ,继续运行

--向外部表插入数据
INSERT INTO myredishash (key, val)
   VALUES ('mytable:r1','{prop1,val1,prop2,val2}');

--修改
UPDATE myredishash
    SET val = '{prop3,val3,prop4,val4}'
    WHERE key = 'mytable:r1';
--删除
DELETE from myredishash
    WHERE key = 'mytable:r1';
		
CREATE FOREIGN TABLE myredis_s_hash (key text, val text)
SERVER redis_server
OPTIONS (database '0', tabletype 'hash',  singleton_key 'mytable');
	
INSERT INTO myredis_s_hash (key, val)
 VALUES ('prop1','val1'),('prop2','val2');
	 
UPDATE myredis_s_hash
SET val = 'val23'
WHERE key = 'prop1';
		
DELETE from myredis_s_hash
 WHERE key = 'prop2';

 至此  pg的redis插件就ok了

参考:https://github.com/pg-redis-fdw/redis_fdw/tree/REL_10_STABLE

http://www.postgres.cn/docs/9.4/ (pg官方文档)

 

-----------------------------------------------------------手动分割----------------------------------------------------------------------------------------

这个月已经发布了redis5.0的版本,redis5.0的版本有点不一致的地方。我在这边贴出5.0redis.conf 文件的翻译。
一下翻译来自谷歌翻译,LZ英文不好。文件来自redis配置文件

# Redis 配置文件示例

#

# 请注意,为了读取配置文件,必须以文件路径作为第一个参数启动Redis:

#

# ./redis-server /path/to/redis.conf

 

#关于单位的注意事项:当需要内存大小时,可以通常以1k 5GB 4M的形式指定它,依此类推:

#

# 1k => 1000 bytes

# 1kb => 1024 bytes

# 1m => 1000000 bytes

# 1mb => 1024*1024 bytes

# 1g => 1000000000 bytes

# 1gb => 1024*1024*1024 bytes

#

#单位不区分大小写,因此1GB 1Gb 1gB都是相同的。

 

################################## INCLUDES ###################################

 

# 在此处包含一个或多个其他配置文件。 如果您有一个标准模板可用于所有Redis服务器,但也需要自定义一些每服#务器设置,这将非常有用。 包含文件可以包含其他文件,因此请明智地使用它。

#

#通知选项“include”不会被来自admin或Redis Sentinel的命令“CONFIG REWRITE”重写。 由于Redis始终使用#最后处理的行作为配置指令的值,因此最好在此文件的开头放置包含,以避免在运行时覆盖配置更改。

#

#如果您有兴趣使用includes来覆盖配置选项,那么最好使用include作为最后一行。

#

# include /path/to/local.conf

# include /path/to/other.conf

 

################################## MODULES #####################################

 

#启动时加载模块。 如果服务器无法加载模块,它将中止。 可以使用多个loadmodule指令。

#

# loadmodule /path/to/my_module.so

# loadmodule /path/to/other_module.so

 

################################## NETWORK #####################################

 

# 默认情况下,如果未指定“bind”配置指令,则Redis将侦听来自服务器上所有可用网络接口的连接。 可以使用#“bind”配置指令只监听一个或多个选定的接口,然后是一个或多个IP地址。

#

# 举例:

#

# bind 192.168.1.100 10.0.0.1

#bind 0.0.0.0 ::1

#

#~~~警告~~~如果运行Redis的计算机直接暴露在互联网上,绑定到所有界面是危险的,并且会将实例暴露给互联

#网上的每个人。 因此,默认情况下,我们取消注释以下绑定指令,这将强制Redis仅侦听IPv4环回接口地址(这意

#味着Redis将只能接受运行到运行的同一台计算机的客户端的连接)。

#

# 如果你确定你想要你所有的界面听到只是评论下面的线。

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#bind 127.0.0.1

 

# 保护模式是一层安全保护,以避免在Internet上打开的Redis实例被访问和利用。

#

# 当保护模式打开时,如果:

#

# 1) 服务器未使用“bind”指令显式绑定到一组地址。

# 2) 没有配置密码。

#

# 服务器仅接受来自IPv4和IPv6环回地址127.0.0.1和:: 1以及Unix域套接字的客户端的连接。

#

#默认情况下启用保护模式。 只有在确定希望其他主机的客户端连接到Redis时,即使未配置任何身份验证,也不应

#使用“bind”指令明确列出一组特定的接口,则应禁用它。

protected-mode no

 

#接受指定端口上的连接,默认为6379(IANA#815344)。 如果指定了端口0,则Redis将不侦听TCP套接字。

port 6379

 

# TCP listen() backlog.

#

#在高要求的每秒的环境中,你需要为了避免缓慢的客户端的连接问题的高积压。 需要注意的是Linux内核会悄悄它

#截断到的/ proc / SYS /网/核心价值/ SOMAXCONN所以一定要确保,以获得预期的效果,以提高SOMAXCONN

#和tcp_max_syn_backlog双方的价值。

tcp-backlog 511

 

#Unix套接字。

#

# 指定将用于侦听传入连接的Unix套接字的路径。 没有默认值,因此Redis在未指定时不会侦听unix套接字。

#

# unixsocket /tmp/redis.sock

# unixsocketperm 700

 

# 客户端空闲N秒后关闭连接(0表示禁用)

timeout 0

 

# TCP keepalive.

#

# 如果非零,则在没有通信的情况下使用SO_KEEPALIVE向客户端发送TCP ACK。 这有两个原因:

#

# 1) 检测死去的同伴

# 2)以从中间视图的网络设备点活着的连接。

#

#在Linux中,指定值(以秒计)是用于发送的ACK的时间段。 需要注意的是关闭连接的时候双是needed.On其他内

#核的周期取决于内核配置。

#

# 此选项的合理值是300秒,这是新的Redis开始,缺省情况Redis的3.2.1。

tcp-keepalive 300

 

################################# GENERAL #####################################

 

# 默认情况下,Redis的不作为守护程序运行。 用“是”如果你需要它。 需要注意的是,当进程化的Redis会写

#在/var/run/redis.pid一个pid文件。

daemonize yes

 

# 如果您从upstart或systemd运行Redis,Redis可以与您的监督树进行交互。 选项:监督无 - 无监督的互动监督新

#贵 - 通过把Redis的成SIGSTOP模信号新贵监督systemd - 写READY systemd信号= 1〜$ NOTIFY_SOCKET监督自

#动 - 检测基于UPSTART_JOB或NOTIFY_SOCKET环境变量暴发户或systemd方法注意:这些 监管方法只表示“流

#程准备就绪”。 他们无法将持续的活跃时间恢复给您的主管。

supervised no

 

#如果指定一个pid文件,在启动时指定Redis的写入,并在出口删除。

#

# 当服务器运行非守护程序时,如果配置中未指定任何pid文件,则不会创建该文件。 当服务器被守护时,即使没有

#指定,也会使用pid文件,默认为“/var/run/redis.pid”。

#

# 创建一个pid文件是最好的努力:如果Redis无法创建它,没有任何不好的事情发生,服务器将启动并正常运行。

pidfile /var/run/redis_6379.pid

 

#指定服务器详细级别。 这可以是调试之一(很多信息,对于开发/测试很有用)详细(许多很少有用的信息,但不像#调试级别那样混乱)通知(中等冗长,你想要在生产中想要的)警告(只有非常 记录重要/关键消息)

loglevel notice

 

#指定日志文件名。 此外,空字符串可用于强制Redis登录标准输出。 请注意,如果使用标准输出进行日志记录但是

#守护进程,则会将日志发送到/ dev / null 

logfile “/usr/local/bin/redis.log”

 

# 要启用日志记录到系统记录器,只需将“syslog-enabled”设置为yes,并可选择更新其他syslog参数以满足您的需要。

# syslog-enabled no

 

# 指定syslog标识。

# syslog-ident redis

 

# 指定syslog工具。 必须是USER或LOCAL0-LOCAL7之间。

# syslog-facility local0

 

# 设置数据库的数量。 默认数据库是DB 0,您可以使用SELECT <dbid>在每个连接上选择不同的数据库,其中dbid

#是介于0和'databases'-1之间的数字

databases 16

 

# 默认情况下,只有在开始登录标准输出且标准输出为TTY时,Redis才会显示ASCII艺术徽标。 基本上这意味着通常

#只在交互式会话中显示徽标。

#

# 但是,通过将以下选项设置为yes,可以强制执行4.0之前的行为并始终在启动日志中显示ASCII艺术徽标。

always-show-logo yes

 

################################ SNAPSHOTTING  ################################

#

# 将数据库保存在磁盘上:

#

# save <seconds> <changes>

#

#如果同时发生了给定的秒数和针对DB的给定写入操作数,则将保存数据库。

#

#在下面的示例中,行为将是保存:900秒后(15分钟)如果在300秒(5分钟)后至少更改了1个键,如果在60秒后

#至少更改了10个键(如果至少10000个键已更改)

#

# 注意:您可以通过注释掉所有“保存”行来完全禁用保存。

#

#  也可以通过添加带有单个空字符串参数的save指令来删除所有先前配置的保存点,如下例所示:

#

#   save ""

 

save 900 1

save 300 10

save 60 10000

 

# 默认情况下,如果启用RDB快照(至少一个保存点)并且最新的后台保存失败,Redis将停止接受写入。这将使用

#户意识到(以一种困难的方式)数据未正确保留在磁盘上,否则可能是 没有人会注意到会发生一些灾难。

#

# 如果后台保存过程将再次开始工作,Redis将自动再次允许写入。

#

# 但是,如果您已设置对Redis服务器和持久性的正确监视,则可能需要禁用此功能,以便即使磁盘,权限等存在问

#题,Redis也将继续正常工作。

 

stop-writes-on-bgsave-error yes

 

# 转储.rdb数据库时使用LZF压缩字符串对象? 默认设置为“是”,因为它几乎总是一个胜利。 如果要在保存子项中

#保存一些CPU,请将其设置为“否”,但如果您具有可压缩值或键,则数据集可能会更大。

rdbcompression yes

 

# 从RDB的第5版开始,CRC64校验和位于文件的末尾。 这使得格式更能抵抗损坏,但在保存和加载RDB文件时需要

#付费(大约10%),因此您可以禁用它以获得最佳性能。

#

# 禁用校验和创建的RDB文件的校验和为零,将告诉加载代码跳过检查。

rdbchecksum yes

 

# 转储数据库的文件名

dbfilename dump.rdb

 

# 工作目录。

#

# 数据库将使用'dbfilename'配置指令写入此目录,并使用上面指定的文件名。

#

#还将在此目录中创建仅附加文件。

#

# 请注意,您必须在此处指定目录,而不是文件名。

dir ./

 

################################# REPLICATION #################################

 

#主副本复制。 使用replicaof使Redis实例成为另一个Redis服务器的副本。 关于Redis复制的一些事情要尽快理解。

#

#   +------------------+      +---------------+

#   |      Master      | ---> |    Replica    |

#   | (receive writes) |      |  (exact copy) |

#   +------------------+      +---------------+

#

# 1)Redis复制是异步的,但是如果主机看起来与至少给定数量的副本没有连接,则可以将主机配置为停止接受写

#入。

#2)如果复制链接丢失了相对较短的时间,Redis副本能够与主服务器执行部分重新同步。 您可能希望根据需要配置#具有合理值的复制积压大小(请参阅此文件的下一部分)。

#3)复制是自动的,不需要用户干预。 在网络分区副本自动尝试重新连接到主服务器并与它们重新同步之后。

#

# replicaof <masterip> <masterport>

 

# 如果主服务器受密码保护(使用下面的“requirepass”配置指令),则可以在启动复制同步过程之前告知副本服

#务器进行身份验证,否则主服务器将拒绝副本服务器请求。

#

# masterauth <master-password>

 

# 当副本丢失与主服务器的连接时,或者当复制仍在进行时,副本可以以两种不同的方式运行:

#

# 1)如果replica-serve-stale-data设置为'yes'(默认值),副本仍将回复客户端请求,可能是过期数据,或者如果

#这是第一次同步,则数据集可能只是空。

#

# 2) 如果replica-serve-stale-data设置为'no',副本将回复错误“SYNC with master in progress”到所有类型的

#命令,但回复到INFO,replicaOF,AUTH,PING,SHUTDOWN,REPLCONF,ROLE, CONFIG,#SUBSCRIBE,UNSUBSCRIBE,PSUBSCRIBE,PUNSUBSCRIBE,PUBLISH,PUBSUB,COMMAND,POST,#HOST:和LATENCY。

#

replica-serve-stale-data yes

 

# 您可以配置副本实例以接受或不接受写入。 针对副本实例进行写入可能对存储一些短暂数据很有用(因为在与主服#务器重新同步后,将很容易删除写在副本上的数据),但如果客户端由于配置错误而写入数据,也可能会导致问

#题。

#

# Since Redis 2.6 by default replicas are read-only.

#

#注意:只读副本不适合在Internet上向不受信任的客户端公开。 它只是一个防止滥用实例的保护层。默认情况下,

#只读副本会导出所有管理命令,例如CONFIG,DEBUG等。 在有限的范围内,您可以使用“rename-#command”来隐藏所有管理/危险命令,从而提高只读副本的安全性。

replica-read-only yes

 

# 复制SYNC策略:磁盘或套接字。

#

# -------------------------------------------------------

# 警告:目前无实际复制是实验性的

# -------------------------------------------------------

#

#新的副本和重新连接的副本无法继续复制过程只是接收差异,需要执行所谓的“完全同步”。 RDB文件从主服务器

#传输到副本服务器。 传输可以以两种不同的方式发生:

#

# 1)磁盘支持:Redis主服务器创建一个将RDB文件写入磁盘的新进程。 稍后,父进程将文件以递增方式传输到副

#本。

# 2)无盘:Redis主机创建一个新进程,直接将RDB文件写入副本套接字,而根本不接触磁盘。

#

# 使用磁盘支持的复制,在生成RDB文件时,只要生成RDB文件的当前子代完成其工作,就可以使用RDB文件对更多

#副本进行排队并提供服务。 在无盘复制的情况下,一旦传输开始,到达的新副本将排队,并且当当前终止时将开始

#新的传输。

#

# 使用无盘复制时,主服务器在开始传输之前等待一段可配置的时间(以秒为单位),希望多个副本到达并且传输可以并行化。

#

# 对于慢速磁盘和快速(大带宽)网络,无盘复制效果更好。

repl-diskless-sync no

 

# 启用无盘复制时,可以配置服务器等待的延迟,以便生成通过套接字将RDB传输到副本的子节点。

#

# 这很重要,因为一旦传输开始,就不可能提供新的副本到达,这些副本将排队等待下一次RDB传输,因此服务器会

# 等待延迟以便让更多的副本到达。

#

#延迟以秒为单位指定,默认为5秒。 要完全禁用它,只需将其设置为0秒,即可尽快启动传输。

repl-diskless-sync-delay 5

 

# 副本以预定义的时间间隔将PING发送到服务器。 可以使用repl_ping_replica_period选项更改此间隔。 默认值为

#10秒。

#

# repl-ping-replica-period 10

 

# 以下选项设置复制超时::

#

#1)从复制的角度来看,在SYNC期间批量传输I / O.

#2)从副本(数据,ping)的角度来看主超时。

#3)从主设备的角度来看副本超时(REPLCONF ACK ping)。

#

# 确保此值大于为repl-ping-replica-period指定的值非常重要,否则每次主服务器和副本服务器之间的流量较低时

# 都会检测到超时。

#

# repl-timeout 60

 

#在SYNC之后禁用副本套接字上的TCP_NODELAY?

#

# 如果选择“是”,Redis将使用较少数量的TCP数据包和较少的带宽将数据发送到副本。 但这可能会增加数据在副

#本端出现的延迟,使用默认配置的Linux内核最多可达40毫秒。

#

# 如果选择“否”,则副本端上显示的数据延迟将减少,但将使用更多带宽进行复制。

#

# 默认情况下,我们针对低延迟进行优化,但是在非常高的流量条件下,或者当主节点和副本很多跳时,将其转

# 为“是”可能是个好主意。

repl-disable-tcp-nodelay no

 

# 设置复制积压大小。 积压是一个缓冲区,当副本断开一段时间后会累积副本数据,因此当副本想要再次重新连接

# 时,通常不需要完全重新同步,但部分重新同步就足够了,只需传递副本的数据部分 断开时错过了。

#

# 复制积压越大,副本可以断开连接的时间越长,以后能够执行部分重新同步。

#

# 只有在至少连接了副本时才会分配积压。

#

# repl-backlog-size 1mb

 

# 在主服务器不再连接副本一段时间后,将释放待办事项。 以下选项配置从最后一个副本断开的时间开始需要经过的

# 秒数,以便释放积压缓冲区。

#

# 请注意,副本永远不会释放积压超时,因为它们可能会在以后升级为主服务器,并且应该能够与副本正确“部分重

# 新同步”:因此它们应始终累积积压。

#

# 值为0表示永远不会释放积压。

#

# repl-backlog-ttl 3600

 

# 副本优先级是Redis在INFO输出中发布的整数。 如果主服务器不再正常工作,Redis Sentinel将使用它来选择要升

# 级为主服务器的副本。

#

# 优先级较低的副本被认为更适合升级,因此,例如,如果有三个副本优先级为10,100,25,Sentinel将选择优先级为

#10的副本,即最低的副本。

#

# 但是,特殊优先级为0会将副本标记为无法执行master的角色,因此Redis Sentinel永远不会选择优先级为0的副本

# 进行升级。

#

# 默认情况下,优先级为100。

replica-priority 100

 

#如果连接的副本少于N个,并且滞后小于或等于M秒,则主设备可以停止接受写入。

#

# N个副本需要处于“在线”状态。

#

# 以秒为单位的延迟(必须<=指定值)是根据从副本接收的最后一次ping计算的,通常每秒发送一次。

#

#此选项不保证N个副本将接受写入,但会在没有足够副本可用的情况下将丢失写入的窗口限制为指定的秒数。

#

# 例如,要求至少3个副本,使用滞后<= 10秒:

#

# min-replicas-to-write 3

# min-replicas-max-lag 10

#

# 将一个或另一个设置为0将禁用该功能.

#

# 默认情况下,min-replicas-to-write设置为0(功能已禁用),min-replicas-max-lag设置为10.

 

# Redis主服务器能够以不同方式列出附加副本的地址和端口。 例如,“INFO复制”部分提供此信息,Redis 

# Sentinel使用该信息以及其他工具,以便发现副本实例

# 此信息可用的另一个位置是主站的“ROLE”命令的输出。

#

# 通常由副本报告的列出的IP和地址以下列方式获得:

#

#   IP:通过检查副本用于与主节点连接的套接字的对等地址来自动检测地址。

#

#   端口:端口在复制握手期间由副本进行通信,通常是副本用于侦听连接的端口。

#

#但是,当使用端口转发或网络地址转换(NAT)时,副本实际上可以通过不同的IP和端口对进行访问。 副本可以使

#用以下两个选项,以便向其主服务器报告一组特定的IP和端口,以便INFO和ROLE都将报告这些值。

#

# 如果只需要覆盖端口或IP地址,则无需使用这两个选项。

#

# replica-announce-ip 5.5.5.5

# replica-announce-port 1234

 

################################## SECURITY ###################################

 

# 在处理任何其他命令之前,要求客户端发出AUTH <PASSWORD>。 这在您不信任其他人可以访问运行redis-

#server的主机的环境中可能很有用。

#

#这应保持注释以便向后兼容,因为大多数人不需要auth(例如,他们运行自己的服务器)。

#

#警告:由于Redis非常快,外部用户可以在一个好的盒子上每秒尝试多达150k的密码。 这意味着你应该使用一个非

#常强大的密码,否则它将很容易破解。

#

# requirepass foobared

 

# 命令重命名

#

# 可以在共享环境中更改危险命令的名称。 例如,CONFIG命令可以重命名为某些内容

#很难猜测它仍然可用于内部使用的工具,但不适用于一般客户。

#

#举例:

#

# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

#

# 也可以通过将命令重命名为空字符串来完全终止命令:

#

# rename-command CONFIG ""

#

# 请注意,更改登录到AOF文件或传输到副本的命令名称可能会导致问题。

 

################################### CLIENTS ####################################

 

# 同时设置已连接客户端的最大数量。 默认情况下,此限制设置为10000个客户端,但是如果Redis服务器无法将进

#程文件限制配置为允许指定的限制,则允许的最大客户端数将设置为当前文件限制减去32(因为Redis保留了 内部

#使用的文件描述符很少)。

#

# 达到限制后,Redis将关闭所有发送错误“最大客户端数量”的新连接。

#

# maxclients 10000

 

############################## MEMORY MANAGEMENT ################################

 

# 将内存使用限制设置为指定的字节数。 达到内存限制时,Redis将尝试根据所选的逐出策略删除密钥(请参阅

# maxmemory-policy)。

#

#如果Redis无法根据策略删除密钥,或者策略设置为'noeviction',则Redis将开始回复错误的命令,这些命令将使用#更多内存,如SET,LPUSH等,并且 继续回复像GET这样的只读命令。

#

# 当将Redis用作LRU或LFU缓存或为实例设置硬内存限制时(使用“noeviction”策略),此选项通常很有用。

#

# 警告:如果您在启用了maxmemory的实例上附加了副本,则会减去提供副本所需的输出缓冲区的大小

#从使用的内存计数,以便网络问题/ resyncs不会触发一个循环,其中的密钥被驱逐,反过来复制的输出缓冲区已

#满,删除的密钥删除触发删除更多的密钥,依此类推,直到数据库 完全清空了。

#

# 简而言之......如果您附加了副本,则建议您为maxmemory设置下限,以便系统上有一些用于副本输出缓冲区的空闲#RAM(但如果策略是“noeviction”则不需要这样做)。

#

# maxmemory <bytes>

 

# MAXMEMORY POLICY:Redis将如何选择达到maxmemory时要删除的内容。 您可以选择五种行为:

#

#volatile-lru  - >使用过期集在密钥中使用近似LRU的Evict。

#allkeys-lru  - >使用近似LRU逐出任何键。

#molatile-lfu  - >在具有过期集的密钥中使用近似的LFU进行Evict。

#allkeys-lfu  - >使用近似的LFU逐出任何键。

#folatile-random  - >删除设置了expire的随机密钥。

#allkeys-random  - >删除随机密钥,任意密钥。

#molatile -ttl  - >删除最近到期时间的密钥(次要TTL)

#noeviction  - >不要驱逐任何东西,只是在写操作上返回错误。

#

#LRU表示最近最少使用

#LFU意味着最少使用

#

# LRU,LFU和volatile-ttl都是使用近似随机算法实现的。

#

# 注意:对于任何上述策略,当没有合适的驱逐键时,Redis将在写操作时返回错误。

#

#      在撰写之日,这些命令是:set setnx setex append incr decr rpush lpush rpushx lpushx linsert lset #rpoplpush sadd sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby zunionstore zinterstore #hset hsetnx hmset hincrby incrby decrby getset mset msetnx exec sort

#

# 默认是:

#

# maxmemory-policy noeviction

 

#LRU,LFU和最小TTL算法不是精确的算法,而是近似的

#算法(为了节省内存),所以你可以调整它的速度或准确性。 默认情况下,Redis将检查五个键并选择最近使用的

#键,您可以使用以下配置指令更改样本大小。

#

# 默认值为5会产生足够好的结果。 10近似非常接近真正的LRU但成本更高的CPU。 3更快但不是很准确。

#

# maxmemory-samples 5

 

# 从Redis 5开始,默认情况下,副本将忽略其maxmemory设置(除非在故障转移后或手动将其提升为主设备)。 

#这意味着密钥的逐出将由主服务器处理,当主服务器中的密钥逐出时将DEL命令发送到副本。

#

# 此行为可确保主服务器和副本服务器保持一致,并且通常是您所需的,但是如果您的副本服务器是可写的,或者您#希望副本服务器具有不同的内存设置,并且您确定对副本服务器执行的所有写操作都是幂等的, 那么你可以改变这#个默认值(但一定要明白

#你在做什么)。

#

# 请注意,由于默认情况下副本不会逐出,因此可能会使用比通过maxmemory设置的内存更多的内存(副本上可能#存在更大的某些缓冲区,或者数据结构有时可能占用更多内存等等)。 因此,请确保监视副本并确保它们具有足够#的内存,以便在主服务器达到配置的maxmemory设置之前永远不会遇到真正的内存不足情况。

#

# replica-ignore-maxmemory yes

 

############################# LAZY FREEING ####################################

 

# Redis有两个基元来删除键。 一个叫DEL,是对象的阻塞删除。 这意味着服务器停止处理新命令,以便以同步方式#回收与对象关联的所有内存。 如果删除的密钥与小对象相关联,则需要时间

# 为了执行DEL命令非常小并且与Redis中的大多数其他O(1)或O(log_N)命令相当。 但是,如果密钥与包含数

#百万个元素的聚合值相关联,则服务器可能会长时间(甚至几秒)阻塞以完成操作。

#

# 由于上述原因,Redis还提供非阻塞删除原语

#  例如UNLINK(非阻塞DEL)和FLUSHALL和ASYNC选项

#FLUSHDB命令,以便在后台回收内存。 这些命令在恒定时间内执行。 另一个线程将尽可能快地逐渐释放后台中的

#对象。

#

#FLUSHALL和FLUSHDB的DEL,UNLINK和ASYNC选项由用户控制。

 #由应用程序的设计决定何时使用其中一个是个好主意。 但是,Redis服务器有时必须删除密钥或刷新整个数据库,#这是其他操作的副作用。 具体而言,Redis在以下方案中独立于用户调用删除对象:

#

# 1)在驱逐时,由于maxmemory和maxmemory策略配置,为了为新数据腾出空间,而不超过指定的内存限制。

# 2)由于过期:必须从内存中删除具有相关生存时间的密钥(请参阅EXPIRE命令)。

#3)由于命令的副作用,该命令将数据存储在可能已存在的密钥上。 例如,RENAME命令可以在用另一个替换旧密

#钥内容时删除旧密钥内容。 同样,SUNIONSTORE或SORT with STORE选项可能会删除现有密钥。 SET命令本身

#删除指定键的任何旧内容,以便用指定的字符串替换它。

#  4)在复制期间,当副本与其主服务器执行完全重新同步时,将删除整个数据库的内容,以便加载刚刚传输的RDB文件。

#

# 在上述所有情况下,默认情况下是以阻塞方式删除对象,就像调用DEL一样。 但是,您可以专门配置每个案例,以#便使用以下配置指令以非阻塞方式释放内存,例如调用UNLINK时::

 

lazyfree-lazy-eviction no

lazyfree-lazy-expire no

lazyfree-lazy-server-del no

replica-lazy-flush no

 

############################## APPEND ONLY MODE ###############################

 

# 默认情况下,Redis异步转储磁盘上的数据集。 这种模式是

#在许多应用程序中都足够好,但Redis进程出现问题或断电可能会导致几分钟的写入丢失(取决于配置的保存点)。

#

#仅附加文件是一种备用持久性模式,可提供更好的持久性。 例如,使用默认数据fsync策略(请参阅配置文件中的后#面部分)Redis在服务器断电等戏剧性事件中只会丢失一秒写入,如果Redis进程本身出现问题,则会丢失一次,但#是 操作系统仍然正常运行。

#

#可以同时启用AOF和RDB持久性而不会出现问题。如果在启动时启用AOF,Redis将加载AOF,即具有更好耐久性保#证的文件。

#

#请查看http://redis.io/topics/persistence以获取更多信息。

 

appendonly no

 

# 仅附加文件的名称(默认值:“appendonly.aof”)

 

appendfilename "appendonly.aof"

 

#fsync()调用告诉操作系统实际在磁盘上写入数据,而不是等待输出缓冲区中的更多数据。 某些操作系统会真正刷#新磁盘上的数据,其他一些操作系统会尽快尝试这样做。

#

#Redis支持三种不同的模式:

#

# no:不要fsync,只需让操作系统在需要时刷新数据。 Faster.always:每次写入仅附加日志后的fsync。 慢,最安#全。 everysec:fsync每秒只有一次。 妥协。

#

# 默认值为“everysec”,因为这通常是速度和数据安全之间的正确折衷。 这取决于你是否可以理解你是否可以将其#放松到“不”,这样可以让操作系统在需要时刷新输出缓冲区,以获得更好的性能(但如果你能接受这个想法的

#话)一些数据丢失考虑了快照的默认持久性模式,或相反,使用“总是”,这是非常慢但比每秒更安全。

#

# 更多细节请查看以下文章:

# http://antirez.com/post/redis-persistence-demystified.html

#

# 如果不确定,请使用“everysec”

 

# appendfsync always

appendfsync everysec

# appendfsync no

 

# 当AOF fsync策略设置为always或everysec时,后台保存过程(后台保存或AOF日志后台重写)是

#在磁盘上执行大量I / O,在某些Linux配置中,Redis可能会在fsync()调用时阻塞太长时间。 请注意,目前没有

#对此进行修复,因为即使在不同的线程中执行fsync也会阻止

#我们的同步写(2)调用。

#

# 为了缓解此问题,可以使用以下选项,以防止在BGSAVE或BGREWRITEAOF正在进行时在主进程中调用fsync()。.

#

# 这意味着当另一个孩子正在保存时,Redis的持久性与“appendfsync none”相同。 实际上,这意味着在最糟糕

#的情况下(使用默认的Linux设置)可能会丢失最多30秒的日志。

#

# 如果您有延迟问题,请将其转为“是”。 否则,从耐用性的角度来看,它是最“最安全”的选择。

 

no-appendfsync-on-rewrite no

 

#自动重写仅附加文件。当AOF日志大小增长指定的百分比时,Redis能够自动重写日志文件,隐式调用#BGREWRITEAOF。

#

# 这是它的工作原理:Redis会在最近的重写后记住AOF文件的大小(如果重启后没有重写,则使用启动时的AOF大

#小)。

#

# 将此基本大小与当前大小进行比较。 如果当前大小大于指定的百分比,则触发重写。 此外,您需要指定要重写的#AOF文件的最小大小,这有助于避免重写AOF文件,即使达到百分比增加但仍然非常小。

#

# 指定零的百分比以禁用自动AOF重写功能。

 

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

 

# 当AOF数据加载回内存时,可能会发现在Redis启动过程中最后截断AOF文件。 当Redis运行崩溃的系统时,尤其

#是在没有data = ordered选项的情况下挂载ext4文件系统时,可能会发生这种情况(但是当Redis本身崩溃或中止

#但操作系统仍能正常工作时,这种情况不会发生)。

#

# 发生这种情况时,Redis可以退出,或者加载尽可能多的数据(现在是默认值),如果发现AOF文件在末尾被截

#断,则启动。 以下选项控制此行为。

#

#如果将aof-load-truncated设置为yes,则会加载截断的AOF文件,并且Redis服务器会开始发出日志以通知用户该#事件。 否则,如果该选项设置为no,则服务器将中止并显示错误并拒绝启动。 当该选项设置为no时,用户需要使

#用“redis-check-aof”实用程序修复AOF文件,然后才能重新启动服务器。

#

# 请注意,如果发现AOF文件在中间被破坏,服务器仍将退出并显示错误。 此选项仅在Redis尝试从AOF文件中读取# 更多数据但不会找到足够的字节时适用。

aof-load-truncated yes

 

# 重写AOF文件时,Redis能够使用AOF文件中的RDB前导码来加快重写和恢复速度。 启用此选项后,重写的AOF文# 件由两个不同的节组成:

#

#   [RDB file][AOF tail]

#

#加载时Redis识别出AOF文件以“REDIS”字符串开头并加载前缀RDB文件,并继续加载AOF尾部。

aof-use-rdb-preamble yes

 

################################ LUA SCRIPTING  ###############################

 

#Lua脚本的最长执行时间(以毫秒为单位)

#

#如果达到最大执行时间,Redis将在最大允许时间后记录脚本仍在执行中,并将开始回复带有错误的查询。

#

# 当长时间运行的脚本超过最大执行时间时,只有SCRIPT KILL和SHUTDOWN NOSAVE命令可用。 第一个可用于停#止尚未调用write命令的脚本。 第二种是在脚本已经发出写入命令但用户不想等待脚本自然终止的情况下关闭服务器

#的唯一方法。

#

#将其设置为0或负值,以便无限制地执行而不发出警告。

lua-time-limit 5000

 

################################ REDIS CLUSTER  ###############################

#

# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# 警告实验:Redis Cluster被认为是稳定的代码,但为了将其标记为“成熟”,我们需要等待一小部分用户将其部署#到生产环境中。

# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#

# 普通Redis实例不能是Redis群集的一部分; 只有作为集群节点启动的节点才可以。 为了启动Redis实例

#群集节点启用群集支持,取消注释以下内容:

#

# cluster-enabled yes

 

#每个群集节点都有一个群集配置文件。 此文件无意手动编辑。 它由Redis节点创建和更新。 每个Redis群集节点都

#需要不同的群集配置文件。 确保在同一系统中运行的实例没有重叠的群集配置文件名。

#

# cluster-config-file nodes-6379.conf

 

# 群集节点超时是节点必须无法访问的毫秒数,以便将其视为故障状态。

#大多数其他内部时间限制是节点超时的倍数。

#

# cluster-node-timeout 15000

 

# 如果其数据看起来太旧,则故障主服务器的副本将避免启动故障转移。

#

# 复制品实际上没有简单的方法来精确测量其“数据年龄”,因此执行以下两项检查:

#

# 1) 如果有多个副本能够进行故障转移,则它们会交换消息,以便尝试为具有最佳复制偏移的副本提供优势(处理主#数据的数据更多)。副本将尝试通过偏移获得其排名,并将故障转移的开始应用于与其排名成比例的延迟。

#

# 2)每个副本都会计算上次与主节点交互的时间。 这可以是收到的最后一个ping或命令(如果主服务器仍处于“已连#接”状态),或者是与主服务器断开连接后经过的时间(如果复制链接当前已关闭)。 如果最后一次交互太旧,则

#副本将不会尝试进行故障转移。

#

# 点“2”可以由用户调整。 具体而言,如果自上次与主服务器的交互后,经过的时间大于,则副本将不会执行故障转移:

#

#   (node-timeout * replica-validity-factor) + repl-ping-replica-period

#

# 因此,例如,如果节点超时为30秒,并且副本有效性因子为10,并且假设默认的repl-ping-replica-period为10

#秒,则副本将不会尝试进行故障转移,如果它无法通话 与主人超过310秒

#

# 较大的副本有效性因素可能允许具有过旧数据的副本故障转移主服务器,而太小的值可能会阻止群集根本无法选择#副本

#

# 为了获得最大可用性,可以将replica-validity-factor设置为值0,这意味着副本将始终尝试进行故障转移

#无论他们最后一次与主人交流,他都会掌握主人。(但他们总是试图应用与他们的偏移等级成比例的延迟)。

#

#零是唯一能够保证当所有分区治愈群集时始终能够继续的值。

#

# cluster-replica-validity-factor 10

 

# 群集副本能够迁移到孤立的主服务器,这些主服务器是没有工作副本的主服务器。 这提高了集群能力

#抵抗失败,否则孤儿大师不能失败

#如果失败,如果它没有工作副本。

#

# 只有当旧主服务器仍然存在至少一定数量的其他工作副本时,副本才会迁移到孤立主服务器。 这个号码

#是“移民障碍”。 迁移障碍为1意味着只有在其主服务器至少有一个其他工作副本时才会迁移副本

#等等。 它通常反映了群集中每个主服务器所需的副本数。

#

# 默认值为1(仅当副主机的主服务器至少保留一个副本时才会迁移副本)。 要禁用迁移,只需将其设置为一个非常#大的值。可以设置值0,但仅用于调试和危险在生产中。

#

# cluster-migration-barrier 1

 

# 默认情况下,如果Redis Cluster节点检测到至少有一个散列槽未被覆盖(没有可用节点正在为其提供服务),则#Redis Cluster节点将停止接受查询。这样,如果集群部分关闭(例如,不再覆盖一系列散列槽),则全部 最终,集#群变得不可用。 只要再次覆盖所有插槽,它就会自动返回。

#

#但是,有时您希望正在运行的集群子集继续接受对仍然覆盖的密钥空间部分的查询。 为此,只需将cluster-require-#full-coverage选项设置为no即可。

#

# cluster-require-full-coverage yes

 

# 此选项设置为yes时,会阻止副本在主节点故障期间尝试故障转移其主节点。 然而,主人仍然可以执行

# 手动故障转移,如果被迫这样做。

#

# 这在不同的场景中非常有用,特别是在多个数据中心操作的情况下,如果不是在总DC故障的情况下,我们希望永远#不会提升一方。

#

# cluster-replica-no-failover no

 

# 要设置群集,请务必阅读文档

# 可在http://redis.io网站上找到。

 

########################## CLUSTER DOCKER/NAT support  ########################

 

# 在某些部署中,Redis群集节点地址发现失败,因为地址是NAT或由于端口被转发(典型情况是Docker和其他容

#器)。

#

# 为了使Redis群集在此类环境中工作,需要一个静态配置,其中每个节点都知道其公共地址。 以下两个选项用于此#范围,并且是:

#

# * cluster-announce-ip

# * cluster-announce-port

# * cluster-announce-bus-port

#

# 每个都向节点指示其地址,客户端端口和集群消息总线端口。 然后将信息发布在总线数据包的标头中,以便其他节# 点能够正确映射发布信息的节点的地址...

#

# 如果未使用上述选项,则将使用正常的Redis群集自动检测。...

#

# 请注意,重新映射时,总线端口可能不在客户端端口+ 10000的固定偏移量处,因此您可以根据重新映射的方式指# 定任何端口和总线端口。 如果未设置总线端口,则通常会使用10000的固定偏移量。

#

# 举例:

#

# cluster-announce-ip 10.1.1.5

# cluster-announce-port 6379

# cluster-announce-bus-port 6380

 

################################## SLOW LOG ###################################

 

#Redis Slow Log是一个记录超过指定执行时间的查询的系统。 执行时间不包括I / O操作,如与客户端通信,发送回#复等,而只是实际执行命令所需的时间(这是唯一的

#线程被阻塞且在此期间无法提供其他请求的命令执行阶段。

#

# 您可以使用两个参数配置慢速日志:一个告诉Redis执行时间是多少(以微秒为单位),以便命令得到记录,另一

#个参数是慢日志。 记录新命令时,将从记录的命令队列中删除最旧的命令。

 

# 以下时间以微秒表示,因此1000000相当于一秒。 请注意,负数会禁用慢速日志,而值为零会强制记录每个命令。

slowlog-log-slower-than 10000

 

#这个长度没有限制。 请注意它会消耗内存。

# 您可以使用SLOWLOG RESET回收慢速日志使用的内存。

slowlog-max-len 128

 

################################ LATENCY MONITOR ##############################

 

# Redis延迟监视子系统在运行时对不同的操作进行采样,以便收集与Redis实例的可能延迟源相关的数据。

#

# 通过LATENCY命令,用户可以使用此信息打印图形并获取报告。

#

# 系统仅记录在等于或大于通过latency-monitor-threshold配置指令指定的毫秒数的时间内执行的操作。 当其值设#置为零时,将关闭延迟监视器。

#

# 默认情况下,延迟监视被禁用,因为如果您没有延迟问题,则通常不需要延迟监视,并且收集数据会对性能产生影#响,虽然非常小,但可以在大负载下进行测量。 如果需要,可以使用命令“CONFIG SET latency-monitor-#threshold <milliseconds>”在运行时轻松启用延迟监视。

latency-monitor-threshold 0

 

############################# EVENT NOTIFICATION ##############################

 

# Redis可以向Pub / Sub客户端通知密钥空间中发生的事件。

#此功能记录在http://redis.io/topics/notifications

#

# 例如,如果启用了密钥空间事件通知,并且客户端对存储在数据库0中的密钥“foo”执行DEL操作,则将通过Pub #/ Sub发布两条消息:

#

# PUBLISH __keyspace@0__:foo del

# PUBLISH __keyevent@0__:del foo

#

# 可以选择Redis将在一组类中通知的事件。 每个类都由一个字符标识:

#

#K Keyspace事件,以__keyspace @ <db> __前缀发布。

#E Keyevent事件,使用__keyevent @ <db> __前缀发布。

#g通用命令(非特定类型),如DEL,EXPIRE,RENAME,......

#$ String命令

#l列出命令

#s设置命令

#h哈希命令

#z排序集命令

#x过期事件(每次密钥到期时生成的事件)

#e Evicted events(当一个密钥被驱逐出maxmemory时生成的事件)

#G $ lshzxe的别名,以便“AKE”字符串表示所有事件。

#

#  notify-keyspace-events”将由零个或多个字符组成的字符串作为参数。 空字符串表示禁用通知。

#

#  示例:要启用列表和通用事件,请从事件名称的角度使用:

#

#  notify-keyspace-events Elg

#

#  示例2:获取订阅频道的过期密钥流

#             name __keyevent@0__:expired use:

#

#  notify-keyspace-events Ex

#

# 默认情况下,所有通知都被禁用,因为大多数用户不需要此功能,并且该功能有一些开销。 请注意,如果您未指定#K或E中的至少一个,则不会传递任何事件。

notify-keyspace-events ""

 

############################### ADVANCED CONFIG ###############################

 

# 当哈希值具有时,使用内存有效的数据结构对哈希进行编码少量条目,最大条目不超过给定阈值。 可以使用以下指#令配置这些阈值。

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

 

# 列表也以特殊方式编码,以节省大量空间。

#可以指定每个内部列表节点允许的条目数

#作为固定的最大大小或最大元素数。

#对于固定的最大大小,请使用-5到-1,表示:

#-5:最大大小:64 Kb < - 不建议用于正常工作负载

#-4:最大尺寸:32 Kb < - 不推荐

#-3:最大尺寸:16 Kb < - 可能不推荐

#-2:最大尺寸:8 Kb < - 好

#-1:最大尺寸:4 Kb < - 好

#正数意味着存储_exactly_元素数量

#每个列表节点。

#性能最高的选项通常为-2(8 Kb大小)或-1(4 Kb大小),

#但如果您的用例是唯一的,请根据需要调整设置。

list-max-ziplist-size -2

 

#Lists也可以压缩。 压缩深度是从列表的*每个*侧到压缩的*排除*的快速列表ziplist节点的数量。 列表的头部和尾部

 # 对于快速推送/弹出操作,始终是未压缩的。 设置是:

#  0:禁用所有列表压缩

#  1:深度1表示“直到1个节点进入列表后才开始压缩,从头部或尾部开始”所以:[head]  - > node-> node  - > #...-> node  - > [tail]

#   [头],[尾巴]永远不会压缩; 内部节点将压缩。

#  2:[head]  - > [next]  - > node-> node  - > ...-> node  - > [prev]  - > [tail]

 #    2这里的意思是:不要压头或头 - >下一个或尾巴 - >上一个或尾巴,

 #    但压缩它们之间的所有节点。

#  3:[head]  - > [next]  - > [next]  - > node-> node  - > ...-> node  - > [prev]  - > [prev]  - > [tail]等

list-compress-depth 0

 

#集合在一种情况下具有特殊编码:当集合仅由在64位有符号整数范围内的基数10中的整数组成的字符串组成时。 以#下配置设置设置集合大小的限制,以便使用此特殊内存保存编码。

set-max-intset-entries 512

 

# 与散列和列表类似,排序集也经过特殊编码,以节省大量空间。 仅当排序集的长度和元素低于以下限制时,才使用此编码:

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

 

# HyperLogLog稀疏表示字节限制。 限制包括16字节头。 当使用稀疏表示的HyperLogLog超过此限制时,它将转换为密集表示.

#

# 大于16000的值完全没用,因为此时密集表示的内存效率更高.

#

#建议值为~3000,以便在不减慢太多PFADD的情况下获得空间有效编码的好处,

#这是具有稀疏编码的O(N)。 当CPU不是问题时,该值可以提高到~10000,但是空间是,并且数据集由许多#HyperLogLog组成,其基数在0到15000范围内。

hll-sparse-max-bytes 3000

 

#Streams宏节点最大大小/项目。 流数据结构是大节点的基数树,其编码内部的多个项目。 使用此配置,可以配置

#单个节点的字节数,以及附加新流条目时切换到新节点之前可能包含的最大项目数。 如果将以下任何设置设置为

#零,则忽略该限制,因此例如可以通过将max-bytes设置为0并将max-entries设置为所需值来设置最大限制限制

stream-node-max-bytes 4096

stream-node-max-entries 100

 

# 主动rehashing每100毫秒的CPU时间使用1毫秒以帮助重新散列主Redis哈希表(将顶级键映射到值)。 Redis使

#用的哈希表实现(请参阅dict.c)执行延迟的rehashing:您在哈希表中运行的操作越多正在重新散列,执行的步骤#越多,所以如果服务器空闲,则重新散列永远不会完成,散列表会使用更多的内存。

#

#默认情况下,每秒使用此毫秒10次,以便主动重新散列主字典,尽可能释放内存。

#

# 如果不确定:如果您有严格的延迟要求,请使用“activerehashing no”,并且在您的环境中,Redis可以不时回

#复2毫秒延迟的查询,这不是一件好事。

#

# 如果你没有这样的硬性要求但想尽可能快速释放内存,请使用“activerehashing yes”。

activerehashing yes

 

# 客户端输出缓冲区限制可用于强制断开未按原因从服务器读取数据的客户端由于某种原因(通常的原因是发布/订阅#者客户端无法像发布者生成消息那样快地消费消息)。

#

# 可以针对三种不同类别的客户端设置不同的限制:

#

#normal  - >普通客户端,包括MONITOR客户端

#recrelica  - >副本客户端

#pubsub  - >客户端订阅了至少一个pubsub通道或模式

#

#每个client-output-buffer-limit指令的语法如下:

#

# client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>

#

#一旦达到硬限制,或者达到软限制并且达到指定的秒数(连续),客户端将立即断开连接。 因此,例如,如果硬限#制为32兆字节,软限制为16兆字节/ 10秒,则客户端将立即断开连接,如果输出缓冲区的大小达到32兆字节,但如#果客户端达到16兆字节并且不断克服,也会断开连接10秒的限制。

#

#默认情况下,普通客户端不受限制,因为它们不会在没有询问的情况下(以推送方式)接收数据,而只是在请求之

#后,因此异步客户端可能会创建一个场景,其中请求的数据速度超过其读取速度。

#

#相反,pubsub和副本客户端有一个默认限制,因为订阅者和副本以推送方式接收数据。

#

# 通过将硬限制设置为零可以禁用硬限制或软限制。

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit replica 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

 

#客户端查询缓冲区累积新命令。 它们仅限于固定的默认情况下,为了避免协议失步(例如由于客户端中的错误)将#导致查询缓冲区中的未绑定内存使用量。 但是,如果您有非常特殊的需求,可以在此配置它,例如我们巨大的多/执#行请求或类似的。

#

# client-query-buffer-limit 1gb

 

# 在Redis协议中,批量请求(即表示单个字符串的元素)通常限制为512 MB。 但是,您可以在此处更改此限制。

#

# proto-max-bulk-len 512mb

 

#Redis调用内部函数来执行许多后台任务,例如在超时中丢失客户端连接,清除从未请求的过期密钥等等。

#

# 并非所有任务都以相同的频率执行,但Redis会根据指定的“hz”值检查要执行的任务。

#

# 默认情况下,“hz”设置为10.当Redis处于空闲状态时,提高该值将使用更多的CPU,但同时,当有许多键同时到#期时,Redis会更快地响应,并且可以使用更多时间来处理超时 精确。

#

# 范围介于1到500之间,但超过100的值通常不是一个好主意。 大多数用户应使用默认值10,并且仅在需要非常低

#延迟的环境中将此值提高到100。

hz 10

 

# 通常,使HZ值与连接的客户端数量成比例是有用的。 例如,这对于顺序非常有用

#避免为每个后台任务调用处理太多客户端,以避免延迟峰值。

#

# 由于默认情况下默认的HZ值保守设置为10,因此Redis提供并默认启用自适应HZ值的功能

 # 当有许多连接的客户端时,这将临时提升。

#

#启用动态HZ时,实际配置的HZ将用作基线,但是一旦连接了更多客户端,实际将根据需要使用配置的HZ值的倍数。 通过这种方式,空闲实例将使用非常少的CPU时间,而繁忙的实例将更具响应性。

dynamic-hz yes

 

# 当子项重写AOF文件时,如果启用了以下选项,则每生成32 MB数据将对文件进行fsync。 这对于以递增方式将文

#件提交到磁盘并避免大延迟峰值非常有用。

aof-rewrite-incremental-fsync yes

 

# 当redis保存RDB文件时,如果启用了以下选项,则每生成32 MB数据将对文件进行fsync。 这很有用

#  为了更加增量地将文件提交到磁盘并避免大的延迟峰值。

rdb-save-incremental-fsync yes

 

# 可以调整Redis LFU驱逐(参见maxmemory设置)。 然而,最好从默认设置开始,只在调查后改变它们以改善性#能以及按键LFU随时间变化的方式进行更改,可以通过OBJECT FREQ命令进行检查。

#

#Redis LFU实现中有两个可调参数:计数器对数因子和计数器衰减时间。 在更改它们之前,了解这两个参数的含义

#非常重要。

#

# LFU计数器每个键只有8位,它的最大值是255,因此Redis使用具有对数行为的概率增量。 给定旧计数器的值,当#访问密钥时,计数器递增

#这条路:

#

# 1.提取0到1之间的随机数R.

# 2.概率P计算为1 /(old_value * lfu_log_factor + 1)。 

# 3.仅当R <P时,计数器才会递增。

#

# 默认的lfu-log-factor为10.这是一个表格,说明频率计数器如何随着不同的访问次数而变化

#对数因子:

#

# +--------+------------+------------+------------+------------+------------+

# | factor | 100 hits   | 1000 hits  | 100K hits  | 1M hits    | 10M hits   |

# +--------+------------+------------+------------+------------+------------+

# | 0      | 104        | 255        | 255        | 255        | 255        |

# +--------+------------+------------+------------+------------+------------+

# | 1      | 18         | 49         | 255        | 255        | 255        |

# +--------+------------+------------+------------+------------+------------+

# | 10     | 10         | 18         | 142        | 255        | 255        |

# +--------+------------+------------+------------+------------+------------+

# | 100    | 8          | 11         | 49         | 143        | 255        |

# +--------+------------+------------+------------+------------+------------+

#

#注意:上表是通过运行以下命令获得的:

#

#   redis-benchmark -n 1000000 incr foo

#   redis-cli object freq foo

#

# 注2:计数器初始值为5,以便为新对象提供累积命中的机会。

#

# 计数器衰减时间是必须经过的时间,以分钟为单位,以便将密钥计数器除以2(或者如果它具有小于<= 10的值则

#递减)。

#

#lfu-decay-time的默认值为1.特殊值0表示每次扫描时都会对计数器进行解析。

#

# lfu-log-factor 10

# lfu-decay-time 1

 

########################### ACTIVE DEFRAGMENTATION #######################

#

#警告此功能是实验性的。 然而,即使在生产中也进行了压力测试,并且由多个工程师手动测试了一段时间。

#

#什么是主动碎片整理?

# -------------------------------

#

#主动(在线)碎片整理允许Redis服务器压缩小分配和内存中数据释放之间留有空格,从而允许回收记忆。

#

# 碎片化是一个自然的过程,每个分配器都会发生(但幸运的是,对于Jemalloc来说却不那么)和某些工作负载。 通#常需要重新启动服务器以降低碎片,或者至少刷新所有数据并再次创建。 但是,由于Oran Agra为Redis 4.0实现了#这一功能,这个过程可以在运行时以“热”方式发生,而服务器正在运行。

#

# 基本上当碎片超过一定水平时(参见下面的配置选项)Redis将开始通过利用某些特定的Jemalloc功能(为了了解

#分配是否导致碎片并将其分配到更好的位置)来创建连续内存区域中值的新副本,同时 ,将发布旧数据的副本。 此

#过程以递增方式重复所有键将导致碎片回落到正常值。

#

#需要了解的重要事项:

#

# 1.默认情况下,此功能处于禁用状态,仅当您编译Redis以使用我们随Redis源代码提供的Jemalloc副本时才有效。 # 这是Linux版本的默认设置。

#

# 2.如果没有碎片问题,则永远不需要启用此功能。

#

# 3.一旦遇到碎片,可以在需要时使用命令“CONFIG SET activedefrag yes”启用此功能。

#

# 配置参数能够微调其行为

碎片整理过程。 如果您不确定它们的含义,最好保持默认设置不受影响。

 

#启用主动碎片整理

# activedefrag yes

 

# 启动活动碎片整理的最小碎片浪费量

# active-defrag-ignore-bytes 100mb

 

# 启动活动碎片整理的最小碎片百分比

# active-defrag-threshold-lower 10

 

# 我们使用最大努力的最大碎片百分比

# active-defrag-threshold-upper 100

 

# 在CPU百分比中进行碎片整理的最小努力

# active-defrag-cycle-min 5

 

# 磁盘碎片整理的最大努力量

# active-defrag-cycle-max 75

 

# 将从主字典扫描处理的最大set / hash / zset / list字段数

# active-defrag-max-scan-fields 1000

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值