一、编译安装
1、下载编译
yum install -y wget gcc gcc-c++ make tar openssl openssl-devel cmake
cd /usr/local/src
wget 'http://download.redis.io/releases/redis-4.0.9.tar.gz'
tar -zxf redis-4.0.9.tar.gz
cd redis-4.0.9
make #make完后会生成可运行的二进制包,这些包直接拷贝就能够使用
2、redis安装在/usr/local/redis里面
mkdir -pv /usr/local/redis/conf /usr/local/redis/bin
cp src/redis-* /usr/local/redis/bin/ #拷贝常用的二进制文件
rm /usr/local/redis/bin/*.c /usr/local/redis/bin/*.o #删除一下不需要的二进制包
cp redis.conf /usr/local/redis/conf/ #拷贝配置文件
3、验证和软链接的建立
/usr/local/redis/bin/redis-server --version
/usr/local/redis/bin/redis-cli --version
ln -s /usr/local/redis/bin/redis-cli /usr/local/bin/
ln -s /usr/local/redis/bin/redis-server /usr/local/bin/
ln -s /usr/local/redis/bin/redis-sentinel /usr/local/bin/
redis-cli --version
二、redis启动和关闭
1、简化redis配置
cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis.conf.bak
cat /usr/local/redis/conf/redis.conf |egrep -v '^#|^$'
mkdir -pv /data/redis/ #创建redis的数据目录
2、 更改redis配置 vim /usr/local/redis/conf/redis.conf
更详细的解释可以看菜鸟教程Redis 配置
bind 0.0.0.0 #监听地址更改,0.0.0.0代表监控所有网卡
port 6379 #监听端口更改,6379为默认
daemonize yes #是否后台启动, Redis 默认不是以守护进程的方式运行,可以通过该配置项修改,使用 yes 启用守护进程(Windows 不支持守护线程的配置为 no )
pidfile "/data/redis/redis.pid" #pid存放目录 当 Redis 以守护进程方式运行时,Redis 默认会把 pid 写入 /var/run/redis.pid 文件,可以通过 pidfile 指定,这里改为/data/redis/redis.pid
logfile "/data/redis/redis.log" #日志存放目录 日志记录方式,默认为标准输出stdout,如果配置 Redis 为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给 /dev/null
dir /data/redis/ #工作目录 指定本地数据库存放目录
3、redis服务器启动和关闭
- 启动
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf #启动redis服务器
- 关闭
先使用redis-cli登陆redis,再执行SHUTDOWN命令关闭redis,也可以kill进程
ps -ef |grep redis
redis-cli
SHUTDOWN #关闭redis服务器
三、系统参数调优
虽然能启动,但查看日志 /data/redis/redis.log 会有一些告警信息,所以需要设置一下系统参数
1、Increased maximum number of open files to 10032 (it was originally set to 1024)
/etc/security/limits.conf 增加 设置最大文件描述符
* - nofile 10240
ulimit -n 查看一下
2、The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128
设置监听队列的数量,somaxconn是指服务端所能accept即处理数据的最大客户端数量,即完成连接上限。/etc/sysctl.conf 增加
net.core.somaxconn = 10240
然后在终端中执行
sysctl -p
sysctl -a |grep soma
3、To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf
/etc/sysctl.conf 增加
vm.overcommit_memory = 1
解释
overcommit_memory是一个内核对内存分配的一种策略
overcommit_memory=0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
overcommit_memory=1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
overcommit_memory=2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
然后在终端中执行
sysctl -p
sysctl -a |grep overcommint
4、hugepage shutdown
关闭大内存页,HugePages是linux内核的一个特性,使用hugepage可以用更大的内存页来取代传统的4K页面,这里redis建议关掉这个功能。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
加到rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
5、删除日志再启动一下redis
rm -rf /data/redis/redis.log
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
然后查看日志,启动都正常,没有告警信息了
四、设置密码
在配置文件中增加 vim /usr/local/redis/conf/redis.conf
requirepass 123456
然后重启redis,再进入,需要使用密码才能操作,也可以在进入时就指定密码redis-cli -a 123456
[root@localhost ~] redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> keys *
1) "src"
2) "key4"
3) "key3"
4) "int_key"
五、查看信息
redis提供一个info命令查看redis服务器的信息,类似linux提供一个top命令查看系统的信息。
1、使用redis-cli提供的info命令查看
[root@localhost redis]# redis-cli
127.0.0.1:6379> info
# Server
redis_version:4.0.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:f42046fbdf7d74dc
redis_mode:standalone
os:Linux 3.10.0-862.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:2657
run_id:ff964f3d2a43fa0c0e4d544967abb5c4fd591382
tcp_port:6379
uptime_in_seconds:12090
uptime_in_days:0
hz:10
lru_clock:7523791
executable:/usr/local/redis/bin/redis-server
config_file:/usr/local/redis/conf/redis.conf
# Clients
connected_clients:3
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:893496
used_memory_human:872.55K
used_memory_rss:7798784
used_memory_rss_human:7.44M
used_memory_peak:893944
used_memory_peak_human:872.99K
used_memory_peak_perc:99.95%
used_memory_overhead:871170
used_memory_startup:786616
used_memory_dataset:22326
used_memory_dataset_perc:20.89%
total_system_memory:8184160256
total_system_memory_human:7.62G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:8.73
mem_allocator:jemalloc-4.0.3
active_defrag_running:0
lazyfree_pending_objects:0
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1601347221
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:0
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0
# Stats
total_connections_received:10
total_commands_processed:21
instantaneous_ops_per_sec:0
total_net_input_bytes:620
total_net_output_bytes:102495
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:1
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
# Replication
role:master
connected_slaves:0
master_replid:08a0bf83112b4468585b4d4c156b6c5ecbac6efd
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:8.94
used_cpu_user:3.31
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
# Cluster
cluster_enabled:0
# Keyspace
db0:keys=23,expires=0,avg_ttl=0
Server 表示redis服务器的信息,里面包含有启动时间等
Clients 表示redis的客户端连接信息。
Memory 表示redis的内存使用信息。
mem_fragmentation_ratio=used_memory_rss_human/used_memory_human #redis发生增加删除的动作,会引起内存碎片化
mem_allocator:jemalloc-4.0.3 #内存分配使用的库,越好的库内存碎片化率越低。低版本的建议升级
Persistence 表示redis的持久化信息,redis虽然主要用来做缓存用,但也提供数据持久化功能,也就是把数据存盘。
Stats 表示redis的一些状态信息,常用来监控
total_connections_received #一共接收了多少连接
total_commands_processed #一共运行了多个命令
total_net_input_bytes #总流入流量
total_net_output_bytes #总流出流量
Replication 表示redis主从状态信息
CPU 表示redis占用的cpu情况
Cluster 表示redis的集群信息
Keyspace 表示redis key的分配情况
2、单独查看某块信息
redis-cli info Keyspace #只查看key
redis-cli info clients #只查看cpu信息