Redis基于内存运行并支持持久化
采用key-value(键值对)的存储形式
优点
redis(remote dictionary server,远程字典服务)是一个开源的使用ANSI C语言编写、遵守BSD协议,支持网络,可基于内存可持久化的日志型、key-Value的数据库,并提供多种语言的API。它通常被称为结构服务器,因为值(value)可以是字符串(string),哈希(hash),列表(list),集合(sets)和有序集合(sorted sets)等类型
redis是完全开源免费的,是一个高性能的key-value数据库
redis的特点
redis支持数据的持久化,可以将内存中的数据库保存在磁盘中,重启的时候可以再次加载进行使用
redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
redis支持数据的备份,即master-slave模式的数据备份(下一篇将会详述redis群集)
redis与其他key-value的不同
redis有着更为复杂的数据结构并且提供对他们的原子操作,这是一个不同于其他数据库的进化路径。redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象
redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据不能大于硬件内存。在内存数据库方面的另外一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式生产的,因为他们不需要进行随机访问
tar zxvf redis-5.0.7 -C /opt
cd /opt/redis-5.0.7
[root@localhost redis-5.0.7]# make
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis install
[root@localhost redis-5.0.7]# ln -s /usr/local/redis/bin/* /usr/local/bin/
[root@localhost redis]# cd /usr/local/src/redis-4.0.9/utils/
[root@localhost utils]#/install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]
Selecting default:6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default-/etc/redis/6379.conf
Please select the redis log file name [/varlog/redis_6379.log]
Selected default - /varllog/redis_6379.log
Please select the data directory for this instance [/varllib/redis/6379]
Selected default -/var/lib/redis/6379
Please select the redis executable path[/usr/local/redis/bin/redis-server
[root@localhost utils]# /etc/init.d/redis_6379 status
Redis is running (5436)
[root@localhost utils]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
[root@localhost utils]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@localhost utils]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost utils]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379>
[root@localhost utils]# redis-cli -h 192.168.10.161-p 6379
192.168.10.161:6379>
获取命令帮助
set:存放数据
get:获取数据
[root@localhost ~]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> set teacher zhanglong
oK
127.0.0.1:6379> get teacher
"zhanglong"
-h:指定服务器主机名
-p:指定服务器端口
-c:指定请求数
-d:以字节的形式指定set/get值的数据大小
-q:强制退出Redis,仅显示query/sec值
向IP地址为192.168.10.161、端口为6379的Redis服务器发送100个并发连接与100000个请求测试性能
[root@localhost ~]# /usr/local/redis/bin/redis-benchmark -h 192.168.10.161 -p 6379 -c 100-n 100000
[root@localhost ~]# /usr/local/redis/bin/redis-benchmark -h 192.168.10.161 -p 6379 -q -d 100
vim letc/redis/6379.conf
save 900 1 '900秒之内至少一次写操作、300秒之内至少发生10次写操作、60秒之内发生至少10000次写操作,只要满足其一都会触发快照操作,注释所有的save项表示关闭RDB'
save 300 10
save 60 10000
dbfilename dump.rdb 'RDB文件名称'
dir /var/lib/redis/6379 'RDB文件路径'
rdbcompression yes '是否进行压缩'
#当RDB持久化出现错误后,是否依然进行继续进行工作,yes:不能进行工作,no:可以继续进行工作,可以通过info中的rdb_last_bgsave_status了解RDB持久化是否有错误
stop-writes-on-bgsave-error yes
#配置存储至本地数据库时是否压缩数据,默认为yes。Redis采用LZF压缩方式,但占用了一点CPU的时间。若关闭该选项,但会导致数据库文件变的巨大。建议开启。
rdbcompression yes
#是否校验rdb文件;从rdb格式的第五个版本开始,在rdb文件的末尾会带上CRC64的校验和。这跟有利于文件的容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗,所以如果你追求高性能,可以关闭该配置
rdbchecksum yes
#指定本地数据库文件名,一般采用默认的dump.rdb
dbfilename dump.rdb
#数据目录,数据库会写入这个目录。rdb、aof文件也会写在这个目录
dir /var/lib/redis/6379
vim /etc/redis/6379.conf
appendonly yes '开启AOF持久化'
appendfilename "appendonly.aof " 'AOF文件名称'
#appendfsync always 'always:同步持久化,每次发生数据变化会立刻写入磁盘
everysec:默认推荐,每秒异步记录—次(默认值)
no:不同步,交给操作系统决定如何同步'
appendfsync everysec
# appendfsync no
aof-load-truncated yes '忽略最后一条可能存在问题的指令'
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命令的最小值,避免刚开始启动
Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF
auto-aof-rewrite-min-size 64mb
#aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。重启可能发生在redis所
在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项(redis宕机或者异常终止不会造
成尾部不完整现象。)出现这种现象,可以选择让redis退出,或者导入尽可能多的数据。如果选择的是yes,
当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。如果是no,用户必须手动redis-
check-aof修复AOF文件才可以
aof-load-truncated yes
#加载redis时,可以识别AOF文件以“redis”开头。
#字符串并加载带前缀的RDB文件,然后继续加载AOF尾巴
aof-use-rdb-preamble yes
[root@master1~]# /usr/localredis/bin/redis-cli
127.0.0.1:6379>info memory
内存碎片率
内存使用率
回收key
20.0.0.51:6379> hset person name zhangsan
20.0.0.51:6379> hset person age 18
20.0.0.51:6379> hset person score 88
20.0.0.51:6379> hset people name lisi
(integer) 1
20.0.0.51:6379> keys * '查询哪些键名'
1) "nannan"
2) "myset:__rand_int__"
3) "people"
4) "person"
5) "mylist" '456是默认'
6) "key:__rand_int__"
7) "counter:__rand_int__"
20.0.0.51:6379> set name lisi
oK
20.0.0.51:6379> expire name 20 '时间是秒,20秒后键名失效'
(integer)1
iptables -F
setenforce 0
yum install gcc gcc-c++ make -y
tar zxvf redis-5.0.7 -C /opt
cd /opt/redis-5.0.7
[root@localhost redis-5.0.7]# make
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis install
[root@localhost redis-5.0.7]# ln -s /usr/local/redis/bin/* /usr/local/bin/
[root@localhost redis-5.0.7]# cd utils/
[root@localhost utils]# ./install_server.sh
'......一直回车'
[root@localhost utils]# netstat -lunpt |grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 16935/redis-server
[root@localhost init.d]# vim /etc/redis/6379.conf
bind 127.0.0.1 20.0.0.51 '绑定本机地址'
[root@redis init.d]# ls
functions netconsole network README redis_6379 'redis_6379 服务管理脚本'
[root@localhost init.d]# service redis_6379 restart '重启服务'
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost ~]# redis-cli -h 20.0.0.51 -p 6379 '-h远程指定地址,-p指定端口'
[root@localhost ~]# redis-cli -h 127.0.0.1 -p 6379 '本地连接'
20.0.0.51:6379> keys *
(empty list or set)
20.0.0.51:6379> set nannan man '存放数据'
OK
20.0.0.51:6379> keys *
1) "nannan"
20.0.0.51:6379> get nannan '获取数据'
"man"
20.0.0.51:6379> del lpf
(integer) 1 '状态码返回1说明前面命令正确执行'
'状态码返回0说明前面命令错误执行'
'服务的三大法宝'
1.配置文件
2.服务管理脚本 service systemctl 管理的脚本,一般要手撕
3.命令脚本 自动生成