Redis是一个开源的使用C语言编写的,支持网络、基于内存亦可持久化的日志型、使用key-value存储数据的非关系型数据库(关系型数据库:表与表之间有关联关系,非关系型数据库:数据与数据之间没有关系)。
Redis特点:
缺点:因为redis是基于内存来存放数据,所以对内存的占用和消耗非常大,如果运用不当,可能会因为内存消耗过多产生性能问题,严重的可能会导致redis宕机。
因此,NOSQL类型的数据库适合在以下场景使用:
1. 对性能要求高
2. 数据模型比较简单
3. 不需要高度的数据一致性
4. 对于给定key,比较容易映射复杂值的情况
首先在redis的官网下载最新的redis源码包
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CMF05CHq-1576225451318)(C:\Users\46275\AppData\Roaming\Typora\typora-user-images\image-20191211214026283.png)]
之后放入到centos某个目录中,因为redis是用C语言编写的数据库,所以我们需要安装gcc环境。这里使用简单的yum安装。
yum -y install gcc gcc-c++ kernel-devel //安装gcc、c++编译器以及内核文件
gcc -v //查看是否安装成功
如果安装成功,则会显示下面的信息:
tar -zxvf redis-5.0.7.tar.gz //解压源码包
cd redis-5.0.7 //进步目录
make //编译
编译完成之后就可以进行安装
make PREFIX=/usr/local/redis install //执行安装目录,如果不加-PREFIX则默认安装到/usr/local/bin
安装完成之后进入/usr/local/redis下的bin目录
可以看到以下文件:
文件介绍:
之后就可以启动redis服务端
./usr/local/redis/bin/redis-server
看到这个图案就证明我们的redis服务端已经启动完成了。6376就是redis的端口,12962是进程号
这时,如果我们想要访问服务端的话,就需要另开一个窗口进行访问。
启动客户端:
./usr/local/redis/bin/redis-cli //启动客户端
启动之后可以看到我们的root已经变成了127.0.0.1:6376
之后我们通过ping命令测试是否成功连接。返回PONG则代表成功
但是每次都需要单独给redis 的服务端开一个窗口,在实际的开发过程中十分不方便,所以接下来我们需要修改redis的配置文件,使redis可以在后台运行,而不是将窗口锁定
第一步:
将之前我们编译后的文件夹中的redis.conf文件复制到安装目录下,注意要与bin目录同级
修改以下属性的值:
daemonize yes //设置redis是否以守护进程的形式运行,默认为no
requirepass <password> //客户端连接redis的密码
之后我们启动的命令也要做出相应的修改
./usr/local/redis/bin/redis-server ./usr/local/redis/redis.conf #给redis添加启动参数
./usr/lcao/redis/bin/redis-cli -h host -p port -a password #启动服务端,-h表示需要连接服务端的ip,-p表示服务端的端口号,-a表示连接密码,默认的-h是127.0.0.1,-p是 6379,所以如果一般可以使用redis-cli -a password 登录
//比较重要的配置项:
1.daemonize no //redis默认不是使用守护进程运行的,可以修改该配置项的值,使用yes以守护进程启动redis
2.pidfile /usr/run/redis_6379.pid //当redis以守护进程运行时,默认将pid写入此路径下的文件中,可以通过修改配置项的值指定其他路径下的文件
3.port: 6379 //redis默认的端口号
4.bind 127.0.0.1 //默认绑定主机,默认情况下只有本机才可以访问redis ,如果需要在其他计算机上访问该服务器上的redis,需要将该配置项注释
5.timeout 300 //当客户端闲置指定时间后,关闭连接,如果设置0,则表示关闭此功能
6.loglevel verbose //指定redis的日志级别,redis的日志级别有:debug、verbose、notice、warning,默认为verbose
7.logfile stdout //日志记录方式,默认为标准输出,如果将redis设置为守护进程,而此处又设置为标准输出,则日志输出会发送给/dev/null
8.databases 16 //设置数据库的数量,默认数据库的标号为0,可以使用SELECT <dbid>命令在连接上指定数据库id
9.save <seconds> <changes> //指定在多长时间,有多少条更新操作,就将数据同步到数据文件,可以多条配合
Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
分别表示 900秒(15分钟)内有1个更新操作,300秒(5分钟)内有10个更新操作,60秒(1分钟)内有10000个更新操作
10.rdbcompression yes //指定存储至本地数据库时是否进行压缩,默认为yes,redis采用LZF压缩,如果想要节省CPU占用,可以关闭此项,但是会导致数据库文件增大
11.dbfilename dump.rdb //指定本地数据库的文件名
12.dir ./ //指定本地数据库文件存放位置。根据启动redis时所在目录存放,比如我在/usr下使用./usr/local/redis/bin/redis-server启动。则会在/usr下生成demp.rdb本地数据库文件
13.replicaof <masterip> <masterport> //设置当本地为slave(主从服务中的从服务)服务时,master服务的IP以及端口号,在redis启动时,它会自动从master进行数据同步
14.masterauth <password> //当master服务设置了密码时,slave服务连接master服务的密码
15.replicaof-read-only yes //设置salve服务是否只读,默认为yes
16.requirepass foobared //设置当客户端连接服务端时的密码,默认关闭
17.maxclients 128 //设置同一时间最大客户端连接数,默认无限制,如果设置为0,则表示不显示,当客户端达到限制时,新的客户端无法连接redis,并会返回max number of clients reached 错误信息
18.maxmemory <bytes> //指定redis最大内存限制,默认是256MB,到达最大内存之后,redis会尝试清除已到期或即将到期的key,当此方法处理之后,仍到达最大内存,这时将无法对redis进行写操作,但是仍然可以读取数据。
19.appendonly no //指定是否在每次更新操作后进行日志记录,redis默认情况下是异步的将数据写入磁盘,如果不开启,可能会因为断电导致一段时间的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
20.appendfilename appendonly.aof //指定更新日志的文件名
21.appendfsync everysec //指定更新日志条件,共有3个值
no:表示等操作系统进行数据缓存同步到磁盘(快)
always:表示每次更新操作后手动调用fsync()将数据同步到磁盘(慢、安全)
everysec:表示每秒同步一次(折中方案,也是默认值)
关于设置最大内存:注意这里设置的最大内存不是redis占用了多少内存之后会采取怎样的策略,而是系统内存达到了设定值的时候,redis就会采取相应的策略,
举个栗子:假如你设定的maxmemory是500M,而你系统已经用了1G的内存,这时,哪怕你的reids里面一条数据都没有,当你进行set的时候,redis一样会报错,返回
(error) OOM command not allowed when used memory > 'maxmemory'.
一、断电、非正常关闭:如linux系统下 kill -9 pid ,这种方式造成的redis关闭会造成数据丢失,所以我们应该尽量避免。
二、正常关闭、数据将会持久化保存:./bin/redis-cli shutdown 如果客户端设置了密码,则需要先连接redis服务端后再使用shutdown关闭。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cx1ic5e2-1576225451334)(C:\Users\46275\AppData\Roaming\Typora\typora-user-images\image-20191212104826962.png)]
大功告成!
文章中不足或有错误的地方,欢迎大家指出。共同进步!感谢。