环境:docker+redis
echo $PATH #可以查看全局环境,可以帮助我们查看redis的启动程序在那些文件夹下面
/usr/local/bin/redis-cli #默认情况下没有密码,直接执行客户端连接便可以进入
vim /mydata/redis/conf/redis.conf #修改密码
requirepass 123456 #添加这一行,表示操作需要登陆认证,重新启动
/usr/local/bin/redis-cli #用这个链接的时候需要用下面这一行进行认证之后才可以操作
auth 123456
权限控制
#早期解决权限控制采用了下面的命令重命名方法
rename-command flushall "" #空双引号代表这个命令不能用了
rename-command flushdb "myflushdb" 使用这个命令来代替flushdb,防止其他人删除数据
Redis-cli连接
redis-cli -h 192.168.50.128 -p 6379
windows客户端免费连接工具:
https://github.com/RedisInsight/RedisDesktopManager/releases/tag/0.8.8
redis配置文件解析
./redis-serve /path/to/redis/redis.conf #redis启动的时候需要绑定配置文件
- includes模块:这个配置主要时针对于不同的环境使用不同的配置文件来方便不同用户操作,比如测试环境就把相应的配置弄在最后一行即可,这个会把当前的配置给代替掉
include /root/test.conf
include /root/prd.conf - modules:加载第三方模块,不常用,nginx会经常加载第三方模块
- network:网络配置,常见的配置如下所示
bind 127.0.0.1 #绑定主机,默认只有本机可以访问
protected-mode no #保护模式,默认不允许其他主机访问
port 6379 #默认客户端连接端口号为6379
tcp-backlog 511 #见下面的TIP
timeout 0 #正常情况下一般客户端和服务端建立tcp连接可以保持2小时
#,设置这个之后如果客户端在这期间空闲时间超过这个指定时间,server端会将这个客户端断开
#,0默认为永不超时
tcp-keepalive 300 #只有在timeout为0的时候服务端会向客户端发起检测请求查看客户端是否存活
#,如果检测两次都发现客户端断开连接则会把相应会话消息进行删除(这种方式增加了服务器的负担
#,不如心跳检测机制灵活)
- general:常用配置模块
daemonize yes #是否作为守护进程启动
pidfile /var/run/redis_6379.pid #记录进程id,如果没有配置,采用守护进程和不采用守护进程pid产生的效果是不同的
#,daemonize为yes的时候,pid文件为/var/run/redis.pid,前台启动的时候没有pid文件
loglevel notice # debug(开发使用),verbose(仔细地),notice(适中的),warning(生产环境中常用,输出日志最少)
logfile "" #为空的时候会输出到空设备
databases 16 #数据库数量,使用select dbid来进行选择
security:用户设置ACL权限
clients:
maxclients 10000 #用于设置客户端连接数量,默认设置为10000,这个和用户可操作的最大文件数量有关
#,如果超出用户可操作的文件最大数量(减去32个系统使用的文件描述符)
#,则为该最大可操作文件数量,超过该值会关闭所有新的连接
#,用户可以操作的最大文件数量使用ulimit -n
#修改该值在后面这个文件里面vim /etc/security/limits.conf
- memory managment:内存管理模块,可以控制最大内存和内容移除问题
maxmemory #bytes 设置内存使用上限,如果使用内存达到上限
#,则会根据相应移除策略移除相应的key值
#,如果不能移除则会将相应的内存使用命令返回error
maxmemory-policy noviction #逐出策略
#volatile-lru:最长久未使用,只对过期key有作用
#allkeys-lru:最长久未使用,对所有key起作用
#volatile-lfu:删除最少使用的
#volatile-random:随机删除一些key进行删除
#volatile-ttl:移除接近到国企时间在ttl范围内的key
#noviction:不进行任何删除,进行内存使用就会返回error
maxmemory-samples 5 #指定要进行删除样本的数量
#,会从众多的key里面根据LRU算法随机选出5个样本
#,然后再从这5个样本里面根据maxmemory-policy算法进行删除
#推荐选用这个数值
maxmemory-eviction-tenaity 10 #移除容忍度
#,设置为0的时候挑选出删除的key立马就进行删除
#,为100的时候可能就不太确定什么时候进行删除了,推荐设置为10
- Thread I/O:#默认关闭的,如果内核在4核的时候建议使用,但是建议留出一核供持久化或则其他使用超过8的时候没有多大的意义
io-threads 1 #通常情况下设置为1
io-threads-do-reads no #没有打开这个开关的情况下,开启的多线程是不会进行读操作的,如果需要进行读操作,则打开这个开关(没有多大的意义)
lscpu #查看系统cpu的数量
TIP:
- 下面两个命令可以查看linux系统版本
uname -a
cat /proc/version - TCP中backlog队列的长度在linux中由内核参数somaxconn决定,在redis中这个队列的长度由tcp-backlog参数和somaxconn参数共同决定,那个小就是该队列的长度, 下面这个是查看,在高并发场景下,这个参数过小会影响redis的性能
cat /proc/sys/net/core/somaxconn
修改上面这个的参数可以在下面这个文件中进行修改,添加下面的配置即可
vim /etc/sysctl.conf
net.core.somaxconn=2048 - backlog:linux2.2之前采用的一个队列来存放的是一次握手和三次握手的队列,linux2.2之后存放的是两个队列来存放tcp连接队列,一个是SYN_RECEIVED存放已经我收一次的连接,ESTABLISHED用来存放建立三次连接的队列,而我们设置的tcp-backlog就是这个数量
- docker容器修改somaxconn参数:
启动容器的时候添加如下指令进行绑定
-v /proc:/writable-proc
在使用这一行对绑定的数据进行修改,然后再查看somaxconn就已经被修改了
echo 1024 > /writable-proc/sys/net/core/somaxconn - sysctl -p:不停机的情况下加载我们配置的参数