2016-12-22 14:28:39
该系列文章链接
NoSQL 数据库简介
Redis的安装及及一些杂项基础知识
Redis 的常用五大数据类型(key,string,hash,list,set,zset)
Redis 配置文件介绍
Redis 持久化之RDB
Redis 持久化之AOF
Redis 主从复制
Redis 事务
Redis 发布与订阅
Redis jedis 介绍
Redis 是高性能的内存键值数据库。
Redis 一般用在部署在 Linux 上的服务器,便是官网也是这样说的,所以请在 Linux 上使用 Redis
(若是自己不知道如何配置服务器,可以去阿里云 腾讯云 等一些云服务器网站上租一台)
如果你想要比较正常的使用 Redis 文件的话,请通读 redis.conf 文件,这会对你使用 redis 产生很大的帮助。
一.redis.conf 的位置
下面这张图片说明了 redis.conf 的位置(直接进入 redis 的安装目录即可,本次使用redis-5.0.3)
redis.conf 是这篇文章的重点; 至于另一个:sentinel.conf,则与 Redis 的主从复制有关,因为很重要,所以这里标记一下
如果需要修改 redis.conf 的配置,请将配置文件复制一份到另一个位置再修改,错了的话以防万一
注意:不论对 redis.conf 做任何修改,请复制一份,再在复制的文件上做修改!
(由于我当前的服务器远程连接网络很不稳定,故使用 windows 版本的 redis.conf 说明)
二.配置文件中各个模块
redis.conf 包含了(以下这段所有英文单词在 redis.conf 中都是大写!) units,includes,network,general,snapshotting,replication,security,limits,append only mode,lua scripting,redis cluster,slow log,lantency monitor,event notification,advanced config 等一大串内容(真可怕/(ㄒoㄒ)/~~)还好我们不需要掌握多少内容对于初级阶段而言。
units 单位,includes 包含,network 网络,general 通用,security 安全,limits 限制 等必须掌握,至少混个脸熟吧。
下面这些是本篇文章不会说明的,因为准备后面说到相关内容时再说明配置文件的内容
Redis 的持久化:
RDB -> snapshotting 快照
AOF -> append only mode
Redis 的主从复制:
replication
一些非常常用的配置我会写出来翻译,其它的自己翻译(真的累... ...)
1.units 这段自己看,主要是两点:
1k 与 1kb 有无区别
1kb 与 1KB 有无区别
2.includes
在这个模块中包含一个或多个其它的配置文件。如果你需要标准的配置文件去运行所有的 redis 服务器以及同样需要定制化一些服务器的某些配置,那么这个模块是非常有用的。
请记住:如果你不想在运行时重写 config 配置请将 includ 这个选项放在文件的开头;
同样如果你想要在运行时重写配置,那么最好把 includ 这个选项放在文件末尾
3.network
3.1bind
通常来说,如果你不配置 bind 这个配置命令的话,redis 服务器可以收到互联网上所有用户的连接!这是非常危险的,除非你有极其特殊的理由这样去做
尽可能地去接收一台或多台网络上的连接,通过配置 bind 配置命令。例子:
bind 192.168.1.100 10.0.0.1
bind 127.0.0.1 ::1
默认的 bind 配置(IPv4)是:
bind 127.0.0.1
这个默认配置只能让 redis 服务器收到正在运行 redis 服务器的这台电脑的连接,也就是在一台电脑上启动服务器,同样在这台电脑上启动 redis 客户端连接服务器才可以。
3.2protected-mode
3.3 port
端口,这没什么好说的吧
3.4 tcp-backlog
tcp 三次握手连接队列
tcp-backlog 即 tcp 三次握手连接队列,连接队列地的总次数为未完成三次队列+已完成三次的队列。在高并发环境下你需要一个比较高的连接队列来保证慢客户端的连接问题。注意 linux 内核会将这个值减小到 /proc/sys/net/core/somaxconn 值,因此你要同时修改 somaxconn 和 tcp-backlog 才能够达到预期的效果。
tcp-backlog 默认为 511
3.5 unix socket
3.6 timeout
在客户端空闲 n 秒关闭连接
一般 300
3.7 tcp-keepalive
4. general
4.1 daemonize:守护进程
默认情况下,Redis不作为守护程序运行。如果需要,请使用 yes。
请注意,当使用守护进程时,Redis会在/var/run/redis.pid中编写一个pid文件。
4.2 superised
4.3 pidfile
如果指定了pid文件,Redis会将其写入启动时指定的位置,并在退出时将其删除。
当服务器运行非守护程序时,如果配置中未指定任何pid文件,则不会创建该文件。当服务器被守护时,即使没有指定,也会使用pid文件,默认为“/var/run/redis.pid”。
如果Redis无法自动创建 pid 文件,那么使用者应该主动创建一个 pid 文件,这是很好的
4.4 loglevel
指定服务器详细级别。
这可以是以下之一:
debug(大量信息,对开发/测试很有用)
verbose(许多有用的信息,但不像 debug 级别一样混乱)
notice(中等 verbose,可能想要在生产时使用)
warning(仅记录非常重要/关键的消息)
一般在开发/测试时使用 verbose,在生产中使用 notice/warning
4.5 logfile
指定日志文件名。此外,'stdout' 命令可以强制 Redis 在标准输出中输出日志。
4.6 syslog-enabled
要启用日志记录到Windows EventLog,只需将“syslog-enabled”设置为yes,并可选择更新其他syslog参数以满足您的需要。如果Redis已安装并作为Windows服务启动,则会自动启用此功能。
4.7 syslog-indent
在Windows应用程序日志中指定事件的源名称。
4.8 databases
设置数据库的数量。默认数据库是 数据库0号,你可以使用 ‘select <dbid>’ 命令在每个连接上选择另外一个数据库, dbid 是一个在0 到 'databases'-1 的数字。
databases 默认是 16
5. security
5.1 auth password (设置密码)
在处理任何其他命令之前,要求客户端写下 ‘AUTH <PASSWORD>’ 命令。这在您不信任其他人但是又可以访问运行redis-server的主机的环境中可能很有用。
这应保持注释以便向后兼容,因为大多数人不需要auth(例如,他们运行自己的服务器)。
警告:由于Redis非常快,外部用户可以在一个好的环境中每秒尝试多达 150k 次的密码。这意味着你应该使用一个非常强大的密码,否则它将很容易破解。
requirepass foobared
5.2 命令重命名。
可以在共享环境中更改危险命令的名称。例如,可以将CONFIG命令重命名为难以猜测的内容,以便它仍可用于内部使用工具,但不适用于一般客户端。
示例:
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
也可以通过将命令重命名为完全终止命令
空字符串:
rename-command CONFIG“”
请注意,更改登录到AOF文件或传输到从站的命令名称可能会导致问题。
6.limits
6.1 maxclients
同一时刻设置已连接客户端的最大数量。默认情况下,此限制数量设置为10000,但是如果Redis服务器无法将进程文件限制配置为允许指定的限制,则允许的最大客户端数将设置为当前文件限制减去32(因为Redis保留了内部使用的文件描述符很少)。
达到限制后,Redis将关闭所有新连接并给关闭的连接发送错误消息“max number of clients reached”。
6.2 persistence-available
如果只将 Redis 用作内存缓存的数据库(没有任何持久化),则后台 AOF / RDB持久化使用的 fork() 机制是不必要的。作为优化,可以在Windows版本的Redis中关闭所有持久化。这会将堆分配重定向到系统堆分配器,并禁用否则会导致 fork() 操作的命令:BGSAVE和BGREWRITEAOF。
此标志不能与配置AOF和RDB操作的任何其他标志组合使用。
6.3 maxmemory <bytes>
不要使用超过指定字节数的内存。
达到内存限制时,Redis将尝试根据所选的 eviction 策略删除 key(请参阅maxmemory-policy)。
如果Redis无法根据策略删除 key,或者策略设置为“noeviction”,则Redis将开始在命令行报告错误的命令,这些命令将使用更多内存以至于不能使用如SET,LPUSH等写入命令,并将继续回复像GET这样的只读命令。
当使用策略LRU缓存或为实例设置及其大的内存限制时(使用“noeviction”策略)来运行 redis,此选项通常很有用。
警告:如果在启用了maxmemory的实例上连接了从属设备(slave,这是主从复制所看到的),则从使用的内存计数中减去为从属设备提供所需的输出缓冲区的大小,以便网络问题/重新同步不会触发关键被驱逐的循环,并且反过来,从属的输出缓冲区已满,删除的键被删除触发删除更多键,依此类推,直到数据库完全清空为止。
简而言之......如果你有随从,建议你设置maxmemory的下限,以便系统上有一些用于从输出缓冲区的空闲RAM(但如果策略是'noeviction'则不需要这样)。
警告:如果达到堆限制,则不设置maxmemory将导致Redis以内存不足异常终止。
注意:由于Redis使用系统页面文件来分配堆内存,因此Windows任务管理器或其他工具(如ProcessExplorer)显示的工作集内存使用量并不总是准确的。例如,在RDB或AOF文件的后台保存之后,工作设置值可能会显着下降。要检查redis-server用于存储数据的正确内存量,请使用INFO client命令。 INFO命令仅显示用于存储redis数据的内存,而不显示Windows进程为其自身要求使用的额外内存。可以计算INFO命令未报告的额外3个内存量,减去Windows任务管理器报告的峰值工作集和INFO命令报告的used_memory_peak。
6.4 maxmemory-policy
MAXMEMORY POLICY:Redis将如何选择达到maxmemory时要删除的内容。您可以选择以下五种行为:
volatile-lru - >删除lru过期命令算法的 key
allkeys-lru - >根据LRU算法删除任何相关的 key
volatile-random - >删除lru过期命令算法的随机 key
allkeys-random - >删除随机密钥,任意密钥
volatile-ttl - >删除最近的到期时间(最小TTL)的密钥
noeviction - >根本不会过期,只是在写操作上返回错误
注意:对于任何上述策略,当没有合适的驱逐键时,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
6.5 maxmemory-samples
LRU和最小TTL算法不是精确的算法,而是近似算法(为了节省内存),因此您可以调整它以获得速度或精度。默认情况下,Redis将检查五个键并选择最近使用的键,您可以使用以下配置指令更改样本大小。
默认值为5会产生足够好的结果。 10近似非常接近真实的LRU但是花费更多的CPU。 3非常快但不是很准确。
7.snapshotting
Redis 持久化之RDB
8.append on mode
Redis 持久化之AOF
9.replication
Redis 主从复制
三.常用配置
如果把常用配置放在这,文章太长了,故这里放个链接