目录
配置文件
一,Units
二, INCLUDE
三,NETWORK
1, bind
2, tcp-backlog
3,timeout
4, tcp-keepalive
四,GENERAL
1,daemonize
2, pidfile
3,loglevel
4, logfile
5, databases
五,SECURITY
1,设置密码
六, CLIENTS
1, maxclients
2, maxmemory
3, maxmemory-policy
4,maxmemory-samples
发布和订阅
1, 简介
2,常用命令
3, 示例演示
配置文件
下面我们介绍 Redis 配置文件(redis.conf 文件)中有哪些配置项及它们的作用。
1,在根目录下面查找名为redis.conf的文件
find / -name redis.conf
2,切换到/etc/redis/
cd /etc/redis/
3,查看此目录下所有文件
ll
4,对redis.conf文件进行备份,注意所属者与所属组与原文件保持一致
cp -a redis.conf redis.conf.backup
使用命令ll再次查看,备份成功
5,编辑redis.conf文件
Vim redis.conf
(1)查看行号
:set nu
(2)取消行号
:set nonu
(3)搜索关键字 bind(回车键后输入n,即可在关键字之间跳转)
/bind
(4)vim里面不能模糊匹配,在命令行用grep命令模糊匹配
-I 不区分大小写;.表示任意字符;*把前一项重复任意0次或n次
在redis.conf文件中使用grep命令模糊查找re..pass的行
grep re.*pass redis.conf
一,Units
配置大小单位,开头定义了一些基本的内存度量单位,只支持 bytes,不支持 bit。大小写不敏感。例如1k表示1000bytes,1kb表示1024bytes。
跳到行首:gg 或者 :1
二, INCLUDE
类似 JSP 程序中的 include,多实例的情况可以把公用的配置文件提取出来。
也就是说redis是支持包含其他文件的,可以将redis.conf当做一个父文件,包含子文件。
搜索include
/include
三,NETWORK
1, bind
默认情况下 bind=127.0.0.1 只能通过127.0.0.1接收请求。在不写的情况下,用户可以通过访问服务器的任意一张网卡访问redis服务器。
注意:如果开启了protected-mode,那么在没有设定bind ip且没有设密码的情况下,Redis只允许接受本机的响应。
本机访问保护模式默认值:yes
该服务默认端口号: 6379
bind没有写,密码没有设置,只能通过127访问,接受本机的响应
1,如果删掉bind=127.0.0.1 -::1以及bind 0.0.0.0
2,查找以bind开头的行,并没有找到
grep ^bind redis.conf
3,重启redis服务
systemctl restart redis
4,查看关于redis的进程
ps -ef | grep redis
5,查看进程的监听情况
ps -ef | grep redis
6,此时,连接失败
7,连接redis服务器,连接失败
redis-cli -h 192.168.206.128
方法一:添加bind
(1)在文件redis.conf中添加bind=0.0.0.0
(2)重启redis服务
systemctl restart redis
(3)重新连接,连接成功
redis-cli -h 192.168.206.128
(4)连接成功
(5)查看进程
ps -ef | grep redis
(6)查看监听的端口号
ss -lntup | grep redis
方法二:设置密码
(1)打开文件redis.conf添加密码
requirepass 123456
(2)重启redis服务
systemctl restart redis
(3)重新连接,输入密码
redis-cli -h 192.168.206.128
ping
auth 123456
也可以直接加-a选项加上密码,后面就不用auth指定密码
redis-cli -h 192.168.206.128 -a 123456
(4)输入密码123456连接
2, tcp-backlog
设置 tcp 的 backlog,backlog 其实是一个连接队列,backlog队列为已经完成三次握手队列的长度。
在高并发环境下你需要一个高 backlog 值来避免客户端连接慢的问题。
注意:
Linux内核会将这个值减小到/proc/sys/net/core/somaxconn的值,所以需要确认增大/proc/sys/net/core/somaxconn和/proc/sys/net/ipv4/tcp_max_syn_backlog 两个值来达到想要的效果
3,timeout
一个空闲的客户端维持多少秒会关闭,0表示关闭该功能。即永不关闭。
4, tcp-keepalive
对访问客户端的一种心跳检测,每 n 秒检测一次。
单位为秒,如果设置为0,则不会进行 Keepalive 检测,建议设置成 60。
四,GENERAL
1,daemonize
是否为后台进程,即守护进程,用于后台启动,设置为yes。
2, pidfile
存放pid文件的位置,每个实例会产生一个不同的pid文件。
(1)查看redis对run目录是否有写的权限,结果没有权限
ll /run -d
(2)查看redis对redis目录是否有写的权限,结果有权限
ll -d redis/
(3)将存放pid文件的位置路径改为/var/run/redis/redis_6379.pid
(4)重启服务
systemctl restart redis
(5)切换到目录/var/run/redis查看所有文件会发现redis_6379.pid文件
(6)打开redis_6379.pid文件
cat redis_6379.pid
(7)查看进程,发现redis的pid为2038
ps -ef | grep redis
3,loglevel
指定日志记录级别,Redis 总共支持四个级别:debug、verbose、notice、warning,默认为notice。
四个级别根据使用阶段来选择,生产环境选择 notice 或者warning。
warning级别最高
记录的日志文件在/var/log/redis/redis.log
查看文件/var/log/redis/redis.logll /var/log/redis/redis.log
4, logfile
日志文件名称
,
5, databases
设定库的数量,默认16,默认数据库为0,可以使用 SELECT <dbid>命令在连接上指定数据库id。
五,SECURITY
1,设置密码
当设置好密码后(即把 requirepass foobared 注解解开),然后使用客户端连接服务器后,在执行 set 命令时,提示需要获取权限。
可以在命令中访问密码的查看、设置和取消。
(1)打开文件redis.conf添加密码
requirepass 123456
(2)重启redis服务
systemctl restart redis
(3)重新连接,输入密码
redis-cli -h 192.168.206.128
ping
auth 123456
(4)也可以直接加-a选项加上密码,后面就不用auth指定密码
redis-cli -h 192.168.206.128 -a 123456
(5)也可以用下面的方法获取密码
config get requirepass
(6)也可以用下面的方法设置密码
config set requirepass 654321
(7)使用修改后的密码登录
redis-cli -h 192.168.206.128 -a 654321
注意:
在命令中设置密码,只是临时的。重启redis服务器,密码就还原了。
永久设置,需要在配置文件中进行设置。
六, CLIENTS
1, maxclients
设置redis同时可以与多少个客户端进行连接。默认情况下为10000个客户端。如果达到了此限制,redis则会拒绝新的连接请求,并且向这些连接请求方发出“max number of clients reached”以作回应。
2, maxmemory
建议必须设置,否则可能导致将内存占满,造成服务器宕机。
设置redis可以使用的内存量。一旦到达内存使用上限,redis将会试图移除内部数据,移除规则可以通过maxmemory-policy来指定。
如果redis无法根据移除规则来移除内存中的数据,或者设置了“不允许移除”,那么redis则会针对那些需要申请内存的指令返回错误信息,比如SET、LPUSH等。
但是对于无内存申请的指令,仍然会正常响应,比如GET等。如果你的redis是主redis(说明你的redis有从redis),那么在设置内存使用上限时,需要在系统中留出一些内存空间给同步队列缓存,只有在你设置的是“不移除”的情况下,才不用考虑这个因素。
3, maxmemory-policy
用于设置内存达到使用上限后的移除规则。有以下参数可设置:
- volatile-lru:只限于设置了 expire 的部分; 优先删除最近最少使用(less recently used ,LRU) 的 key。
- allkeys-lru:所有key通用; 优先删除最近最少使用(less recently used ,LRU) 的 key。
- volatile-random:只限于设置了 expire 的部分; 随机删除一部分 key。
- allkeys-random:所有key通用; 随机删除一部分 key。
- volatile-ttl:只限于设置了 expire 的部分; 优先删除剩余时间(time to live,TTL) 短的key。
- noeviction:不删除策略。达到最大内存限制时, 如果需要更多内存, 直接返回错误信息。(默认值)
4,maxmemory-samples
redis中并不会准确的删除所有键中最近最少使用的键,而是随机抽取maxmeory-samples个键,删除这个样本中最近最少使用的键。
maxmemory-samples用于设置样本数量,LRU算法和最小TTL算法都并非是精确的算法,而是估算值,所以你可以设置样本的大小,redis默认会检查这么多个key并选择其中最少使用或者存活时间最短的那个。
一般设置3到7的数字,数值越小样本越不准确,但性能消耗越小。
发布和订阅
1, 简介
Redis提供了基于“发布/订阅”模式的消息机制。此种模式下,消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道(channel) 发布消息,订阅该频道的每个客户端都可以收到该消息。
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 ,以及订阅这个频道的三个客户端 —— client1 、client2 和 client3 之间的关系:
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:
2,常用命令
序号 | 命令语法 | 描述 |
1 | PSUBSCRIBE pattern [pattern ...] | 订阅一个或多个符合给定模式的频道 |
2 | PUBSUB subcommand [argument [argument ...]] | 查看订阅与发布系统状态,例如:PUBSUB channels |
3 | PUBLISH channel message | 将信息发送到指定的频道 |
4 | PUNSUBSCRIBE [pattern [pattern ...]] | 退订所有给定模式的频道 |
5 | SUBSCRIBE channel [channel ...] | 订阅给定的一个或多个频道的信息 |
6 | UNSUBSCRIBE [channel [channel ...]] | 退订给定的频道 |
3, 示例演示
以下实例演示了发布订阅是如何工作的。
(1)创建了订阅频道名为 redisChat:
subscribe redischat
(2)现在,我们先重新开启1个 redis 客户端,然后在同一个频道 redisChat 发布两次消息,订阅者就能接收到消息。
publish redischat "send message"
然后切换到前一个客户端,就可以看到如下信息:
在第二个端口再次发布hello world
publish redischat "hello world"
在前一个端口查看订阅信息