tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7
make
make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/* /usr/local/bin/
cd /opt/redis-5.0.7/utils/
./install_server.sh
... '一直回车'
'输入ok'
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf //配置文件路径
Log file : /var/log/redis_6379.log //日志文件路径
Data dir : /var/lib/redis/6379 //数据文件路径
Executable : /usr/local/bin/redis-server //可执行文件路径
Cli Executable : /usr/local/bin/redis-cli //客户端命令工具
[root@localhost utils]# netstat -lnupt | grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 100865/redis-server
'停止'
/etc/init.d/redis_6379 stop
'启动'
/etc/init.d/redis_6379 start
'重启'
/etc/init.d/redis_6379 restart
'状态'
/etc/init.d/redis_6379 status
[root@localhost utils]# redis-cli
127.0.0.1:6379>
vim /etc/redis/6379.conf '进入主配置文件'
bind 127.0.0.1 14.0.0.77 '添加监听主机地址14.0.0.77'
[root@localhost utils]# /etc/init.d/redis_6379 restart '重启服务'
[root@localhost utils]# redis-cli -h 14.0.0.77 -p 6379
14.0.0.77:6379>
获取命令帮助
redis-cli命令行工具
[root@localhost ~]# redis-cli -h 14.0.0.77 -p 6379
14.0.0.77:6379> help @list
BLPOP key [key ...] timeout
summary: Remove and get the first element in a list, or block until one is available
since: 2.0.0
...
14.0.0.77:6379> help set
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
summary: Set the string value of a key
since: 1.0.0
group: string
[root@localhost ~]# redis-cli -h 14.0.0.77 -p 6379
14.0.0.77:6379> set color blue
OK
14.0.0.77:6379> keys *
1) "color"
14.0.0.77:6379> get color
"blue"
14.0.0.77:6379> keys *
1) "num"
2) "person"
14.0.0.77:6379> exists person
(integer) 1
14.0.0.77:6379> del person
(integer) 1
14.0.0.77:6379> type num
string
14.0.0.77:6379> rename num new
OK
14.0.0.77:6379> keys *
1) "new"
14.0.0.77:6379> dbsize
(integer) 1
-h:指定服务器主机名
-p:指定服务器端口
-c:指定并发连接数
-n:指定请求数
-d:以字节的形式指定SET/GET指定数据大小
-q:强制退出Redis,仅显示query/sec值
向IP地址为14.0.0.77、端口为6379的Redis服务器发送100个并发连接与100000个请求测试性能
[root@localhost ~]# redis-benchmark -h 14.0.0.77 -p 6379 -c 100 -n 100000
[root@localhost ~]# redis-benchmark -h 14.0.0.77 -p 6379 -q -d 100
redis-benchmark -t set,lpush -n 100000 -q
[root@localhost ~]# redis-cli -h 14.0.0.77 -p 6379
14.0.0.77:6379> keys *
1) "myset:__rand_int__"
2) "counter:__rand_int__"
3) "new"
4) "mylist"
5) "key:__rand_int__"
14.0.0.77:6379> select 10
OK
14.0.0.77:6379[10]> keys *
(empty list or set)
14.0.0.77:6379[10]> set name zhangsan
OK
14.0.0.77:6379[10]> keys *
1) "name"
14.0.0.77:6379[10]> get name
"zhangsan"
14.0.0.77:6379[10]> move name 3 '将name迁移到数据库3'
(integer) 1
14.0.0.77:6379[10]> keys *
(empty list or set)
14.0.0.77:6379[10]> select 3
OK
14.0.0.77:6379[3]> keys *
1) "name"
14.0.0.77:6379[3]> get name
"zhangsan"
14.0.0.77:6379[3]> hset person name zhangsan
(integer) 1
14.0.0.77:6379[3]> hset person age 24
(integer) 1
14.0.0.77:6379[3]> hset person score 100
(integer) 1
14.0.0.77:6379[3]> keys *
1) "person"
2) "name"
14.0.0.77:6379[3]> hget person name
"zhangsan"
14.0.0.77:6379[3]> hget person age
"24"
14.0.0.77:6379[3]> hget person score
"100"
Redis的默认持久化方式(路径:/var/lib/redis/6379)
默认文件名dump.rdb
触发条件
优缺点
通过RDB文件恢复数据
配置文件选项
vim /etc/redis/6379.conf
save 900 1 '900秒之内至少一次写操作'
save 300 10 '300秒之内至少发生10次写操作'
save 60 10000 '60秒之内发生至少10000次写操作' '只要满足其一就会触发快照操作,注释所有的save项表示关闭RDB'
dbfilename dump.rdb 'RDB文件名称'
dir /var/lib/redis/6379 'RDB文件路径'
rdbcompression yes '是否进行压缩'
Redis默认不开启
弥补RDB的不足(数据的不一致性)
采用日志的形式来记录每个操作,并追加到文件中
Redis重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
根据AOF文件恢复数据
配置文件选项
vim /etc/redis/6379.conf
appendonly yes '开启AOF持久化'
appendfilename "appendonly.aof" 'AOF文件名称'
# appendfsync always 'always:同步持久化,每次发生数据变化会立刻写入磁盘'
appendfsync everysec 'everysec:默认推荐,每秒异步记录一次(默认值)'
# appendfsync no 'no:不同步,交给操作系统决定如何同步'
aof-load-truncated yes '忽略最后一条可能存在的指令'
只需要将appendonly设置为yes
appendonly.aof文件自动生成
AOF的重写机制
AOF重写的原理
AOF的重写配置
vim /etc/redis/6379.conf
'#在日志进行BGREWRITEAOF时,如果设置为yes表示新写操作不进行同步fsync,只是暂时缓存在缓冲区里,避免造成磁盘IO操作冲突,等重写完成后再写入。Redis中默认为no'
no-appendfsync-on-rewrite no
'#当前AOF文件大小是上次日志重写时AOF文件大小两倍时,发生BGREWRITEAOF操作'
auto-aof-rewrite-percentage 100
'#当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Redis时由于文件尺寸较小导致频繁的BGWRITEAOF'
auto-aof-rewrite-min-size 64mb
[root@localhost ~]# redis-cli -h 14.0.0.77 -p 6379
14.0.0.77:6379> info memory
# Memory
used_memory:11767568
used_memory_human:11.22M '内存使用总量'
used_memory_rss:16564224
used_memory_rss_human:15.80M
used_memory_peak:24876192
used_memory_peak_human:23.72M
used_memory_peak_perc:47.30%
used_memory_overhead:841470
used_memory_startup:791400
used_memory_dataset:10926098
used_memory_dataset_perc:99.54%
allocator_allocated:12202040
allocator_active:12582912
allocator_resident:17756160
total_system_memory:1907965952
total_system_memory_human:1.78G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.03
allocator_frag_bytes:380872
allocator_rss_ratio:1.41 '内存碎片率'
allocator_rss_bytes:5173248
rss_overhead_ratio:0.93
rss_overhead_bytes:-1191936
mem_fragmentation_ratio:1.41
mem_fragmentation_bytes:4837680
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:49694
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
内存碎片率:1为最佳
保证合理分配redis有限的内存资源
当达到设置的最大阀值时,需选择一种key的回收策略
volatile-lru:使用LRU算法从已设置过期时间 (推荐)
volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰 (推荐)
volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰
allkeys-lru:使用LRU算法从所有数据中淘汰数据
allkeys-random:从数据集合中任意选择数据淘汰
no-enviction:禁止淘汰数据