#一、安装

#(1.1)yum安装

yum -y install redis

#(1.2.1)编译安装

wget x..x......
tar xzf redis-2.8.17.tar.gz -C /opt/
cd /opt/redis-2.8.17
make
cp redis.conf /etc/redis.conf
cp redis-benchmark redis-cli redis-server /usr/bin/ #添加环境变量,也可其他方法
cat >/usr/lib/systemd/system/redis.service <<EOF

[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=/usr/bin/redis-server /etc/redis.conf --daemonize no
ExecStop=/usr/bin/redis-shutdown
User=redis
Group=redis
[Install]
WantedBy=multi-user.target
EOF
#(1.2.2)配置redis为开机自启动服务
systemctl enable redis.service
systemctl start redis.service
#(2)开放防火墙,针对6379端口
firewall-cmd --permanet ...
#(3)在本机测试 && 远程登录测试redis
redis-cli
>set name jason
OK
>get name
"jason"

redis -h 45.x.x.234
>get name
"jason"


#二、redis配置认证密码

#(1)修改配置文件/etc/redis.conf

sed -ir 's/#requirepass foobared/requirepass mopRedis123/g' /etc/redis.conf
#修改密码为mopRedis123

#(2)重启redis或者重新加载配置文件reload

service redis restart

#(3)登录验证

redis-cli -h 127.0.0.1 -p 6379 
##127.0.0.1:6379> config get requirepass
##(error) NOAUTH Authentication required.
#没有验证登录密码,查询失败
redis-cli -h 127.0.0.1 -p 6379 -a mopRedis123
##127.0.0.1:6379> config get requirepass
##1) "requirepass"
##2) "mopRedis123"
#验证密码后查询成功

#(3.1)进入redis-cli后,AUTH认证密码
redis-cli
CONFIG GET maxclients
##(error) NOAUTH Authentication required.
AUTH mopredis123
##OK
CONFIG GET maxclients
##1) "maxclients"
##2) "10000"


#(4)命令行修改redis登录密码

redis-cli -h 127.0.0.1 -p 6379 -a mopRedis123
config set requirepass newpasswd #设置新的登录密码
#OK
config get requirepass
#1) "requirepass"
#2) "newpasswd"
exit
redis-cli -h 127.0.0.1 -p 6379 -a mopRedis123 #使用旧密码登录后,查询受限了
config get requirepass
#(error) NOAUTH Authentication required.
exit
redis-cli -h 127.0.0.1 -p 6379 -a newpasswd #使用新密码登录后,正常使用redis
config get requirepass
#1) "requirepass"
#2) "newpasswd"

#PS:重启redis后,会加载原/etc/redis.conf中文件的密码,命令行设置的密码失效。


#(5)配置redis集群后,master配置密码,redis slave上修改配置

sed -i 's/# masterauth <master-password>/masterauth mopRedis123/g' /etc/redis.conf
service redis restart


#三、redis使用命令

#(1)redis客户端redis-cli

#(1.1)PING监测redis服务

127.0.0.1:6379> ping
PONG
##PING用于监测redis服务是否启动,结果为PONG则表示服务正常

#()获取客户端列表client list,杀死指定ID的客户端

127.0.0.1:6379> CLIENT LIST
id=18 addr=127.0.0.1:48070 fd=10 name= age=1458 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
id=1851 addr=45.116.146.136:26465 fd=6 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=lpop
id=1852 addr=45.116.146.136:26463 fd=7 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=lpop
id=1853 addr=45.116.146.136:26464 fd=8 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=lpop
id=1854 addr=45.116.146.136:26469 fd=9 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=lpop
127.0.0.1:6379> CLIENT KILL id 1851


#()INFO获取redis服务的统计信息

127.0.0.1:6379> INFO

    #主要查看参数:

# Server
uptime_in_seconds:83904 #redis服务运行时间
uptime_in_days:0 #redis运行天数
# Clients
connected_clients:1 #已连接的客户端数量(不包括从slave服务器过来的连接)
blocked_clients:0 #正在等待&阻塞命令(BLPOP/BRPOP/BRPOPLPUSH)的客户端数量
# Memory
used_memory_human:790.88K #人类可读的格式,显示redis分配的总内存
used_memory_peak_human:979.51K #人类可读格式显示最大内存消耗值峰值
mem_fragmentation_ratio:7.33 #used_memory_rss(系统中实际使用内存)和used_memory(系统分配内存)的比率。
# Stats
total_connections_received:96840 #redis服务已接收的连接数请求
total_commands_processed:857679 ##已执行的命令数
instantaneous_ops_per_sec:2 ##每秒执行的命令数量
rejected_connections:0 ##因为最大客户端数量限制而被拒绝的连接请求数量
expired_keys:0 ##因为过期而被自动删除的数据库键数量
evicted_keys:0 ##因为最大内存容量限制而被驱逐(evict)的键数量
keyspace_hits:0 ## 查找数据库键成功的次数
keyspace_misses:190208 ##查找数据库键失败的次数
# Persistence
rdb_changes_since_last_save:0 ##距离最近一次成功创建持久化文件之后,经过了多少秒
aof_last_bgrewrite_status:ok ##一个标志值,记录了最近一次创建 AOF 文件的结果是成功还是失败

设置内存分配规则:(内核调优)

设置内存分配策略(可选,根据服务器的实际情况进行设置)

/proc/sys/vm/overcommit_memory

可选值:0、1、2。

0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

2, 表示内核允许分配超过所有物理内存和交换空间总和的内存


值得注意的一点是,redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为8G,这个时候也要同样分配8G的内存给child,如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)



参考文档:

Redis 教程  ​​http://www.runoob.com/redis/redis-server.html​

redis info详解 ​​http://www.cnblogs.com/wjoyxt/p/5147467.html​