¶概述
Redis是一种支持分布式(不使用分布式的功能也可以)的nosql数据库,他的数据是保存在内存中的,同时Redis可以定时吧内存中的数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构,包括 string,list列表[队列和栈] ,set[集合],sorted set[有序集合],hash(hash表)。
Redis的使用场景:一般都是在web后台,或者在服务器后台
- 登录会话存储:存储在 Redis 中,与 memcached 相比,数据不会丢失。
- 排行版/计数器:比如一些秀场类的项目,经常会有一些前多少名的主播排名,还有一些文章阅读量的技术,或者新浪微博的点赞数等。
- 作为消息队列:比如 celery 就是使用 Redis 作为中间人。
- 当前在线人数:会显示系统当前在线人数。
- 一些常用的数据缓存:比如我们的 BBS 论坛,板块不会经常变化的,但是每次访问首页都要从 mysql 中获取,可以在Redis中缓存起来,不用每次请求数据库。
- 把前200篇玩文章缓存或者评论缓存:一般用户浏览网站,只会浏览前面一部分文章或者评论,那么可以把前面200篇文章和对应的评论缓存起来。用户访问超过的,就访问数据库,并且以后文章超过200篇,则把之前的文章删除。
- 好友关系:文博好友关系使用 Redis 实现。
- 发布和订阅的功能:可以用来做聊天软件。
¶redis的安装
¶ubuntu 16.04.01下安装
使用 apt-get install redis-server
进行安装(16版本以下可以直接使用 apt install redis-server
安装)
如果遇到提示:
E: Unable to locate package redis-server
则使用sudo apt-get update 进行更新后再使用命令进行安装
卸载 apt-get purge –auto-remove redis-server
启动:通过 ps aux|grep redis
进行查看
1 | root 16373 1286 0 11:27 pts/0 00:00:00 grep --color=auto redis |
就是没打开,此时使用 service redis-server start
进行开启。
停止服务:service redis-server stop
重启服务:service redis-server restart
¶centos7系统下安装
安装: yum install redis
启动: systemctl start redis
启动服务时,使用的时默认的 redis 配置(/etc/redis.conf中的内容),此时就不需要在命令后添加具体的配置文件,如需使用特定的配置文件来启动 redis,则需要在使用
redis-server 配置文件路径
手动开启。
重启: systemctl restart redis
停止: systemctl stop redis
除了通过 systemctl stop redis
命令的方式终止 redis 服务,还可以在客户端(redis-cli)中通过 shutdown 指令关闭redis服务。
查看状态: systemctl status redis
centos7下的 redis 配置文件所在位置默认是 /etc/redis.conf
,具体可以使用 whereis redis
查看到。
可以参考该内容:https://www.cnblogs.com/chengxs/p/9833911.html
¶windows系统下的安装及使用
下载地址:https://github.com/MicrosoftArchive/redis/releases
运行:进入到redis安装的所在路径,然后执行 redis-server.exe redis.windows.conf
就可以运行了。
注意:第一次执行
redis-server.exe redis.windows.conf
可能会报错,
[12672] 21 Apr 16:52:01.018 # Creating Server TCP listening socket *:6379: bind: No error
解决方法:在命令行中运行以下命令断开连接
redis-cli.exe
127.0.0.1:6379>shutdown
not connected>exit
之后再次重新执行redis-server.exe redis.windows.conf
启动即可。
服务启动完成之后,执行 redis-cli.exe
,即可连接 redis 数据库了。
注意:启动服务的时候是要指定配置文件的,即 windows 系统下的 redis.windows.conf 文件,linux 下是 redis.conf 文件,才算是完整的启动,否则就会出现启动了服务器,但是连接后没有数据的情况,远程连接也没有用。
没有添加配置文件的启动都会在第一行显示[19668] 16 Apr 10:14:31.228 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server.exe /path/to/redis.conf
,但是连接操作 redis-cli 的启动不受影响,只会影响到查数据,远程连接别的redis 数据库也不会受到影响(别的redis数据库服务正确启动了—使用了配置文件启动)。
¶连接
redis 和 mysql 以及 mongdb 是一样的,都提供客户端进行连接,输入命令 redis-cli(前提是redis安装路径已经加入环境变量了)就可以链接到 redis 服务器了。
¶其他机器访问本机redis服务器
需要修改配置,默认情况下不能访问。
想要让其他机器访问本机的 redis 服务器,那么要修改 redis.conf 的配置文件,修改 bind [自己的ip地址或者0.0.0.0]
,其他机器才能访问。
注意:bind绑定的本机网卡的 ip 地址,而不是想让其他机器连接的 ip 地址。如果有多块网卡,那么可以绑定多个网卡的 ip 地址。如果绑定到的是 0.0.0.0 ,那么意味着其他机器可以通过本机所有的 ip 地址进行访问,绑定的是 127.0.0.1 则只有本机可以访问,外界无法进行访问( 127.0.0.1 是本地回环地址)。通过 ifconfig 查看本机网卡配置。
所以,如果我们想限制只有指定的主机可以连接到 redis 中,我们只能通过防火墙来控制,而不能通过 redis 中的 bind 参数来限制。如使用阿里云的安全组,来限制指定的主机连接6379端口。
¶若想被其他机器访问的时候,具体做法
¶bind IP
找到 bind 127.0.0.1
将其注释,或者修改为 bind [自己的ip地址或者0.0.0.0]
,使用云服务器的时候,ip使用的是私有IP。
注意:对 redis.conf 文件修改之后,最好重启一下,配置文件才能生效,centos7下使用
systemctl restart redis
命令进行重启。
¶设置密码
为了系统安全(因为设置了所有的外部及其都可以通过设置的IP访问到该数据库)最好设置一下访问密码,在配置文件中修改 requiredpass 设置的密码
,此时就给 redis 设置了密码。设置密码之后,使用 redis-cli 访问数据库的时候,需要添加 -a 密码
参数进行访问(不添加或者输入的密码错误都可以进入,但是当进行的时候就会提示 (error) NOAUTH Authentication required.
),两种方式可以解决:
- 访问的时候,添加 -a 参数进行访问,如
redis-cli -a 设置的密码
。 - 未使用密码进入 redis-cli 后,使用
auth 密码
进行验证,通过之后提示 OK,即可正常使用。
除了修改配置文件 redis.conf 的方式外,还可以在 redis-cli 中使用 config 指令的方式进行密码的修改和设置:
1 | $ 127.0.0.1:6379> config get requirepass # 获得 requirepass 设置的密码 |
*只是使用这种方式设置的密码只对本次启动的redis服务有效,一旦redis服务重启,设置就会消失
¶关于如何在外部链接阿里云主机centos7中的redis
- 修改配置文件
执行vim /etc/redis.conf
修改配置文件,安装的位置可能不同,可使用whereis redis
进行查看
redis 默认只能本机访问,需要修改一些配置
注释掉 bind 127.0.0.1 或者是改为 bind 0.0.0.0
配置密码 requirepass
取消注释并改为自己需要的密码,如requirepass 密码
- 开放 6379 端口
端口开放之后最好重新启动阿里云服务器或者使用systemctl stop redis
停止 redis 的服务(推荐最好还是重启服务器的好),使用ps aux|grep redis
查看 redis-server 服务是否关闭,确认关闭后,使用systemctl start redis
重新启动 redis-server 服务。 - 访问
在外部访问的时候,通过redis-cli –h 公有ip地址 -p 6379
进行访问(当然,本地需要安装 redis-cli 服务),记住一定是公有ip地址,此外若是设置了访问密码的话,需要使用 -a 参数传递密码,如果 redis 设置了密码,而登录的时候没有传递密码的话,会报错(error) NOAUTH Authentication required.
。
使用服务器的话,建议还是添加密码,否则容易被黑,因为开放了所有 ip 都可以访问。
¶redis的权限设置
redis 可以通过设置密码来增强安全强度。除了设置密码,我们还可以通过修改 redis 的默认端口、对端口做防火墙等。
注意:redis 密码的设置采用的是明文的方式,设置在配置文件 redis.conf 中的 requirepass 字段,所以我们要保证 redis.conf 文件的访问权限以保证数据库安全。
redis3.2版本后新增 protected-mode 配置,默认是yes,即开启。设置外部网络连接redis服务,设置方式如下:
-
关闭 protected-mode 模式,此时外部网络可以直接访问(相当于设置了 bind 0.0.0.0 ),配置密码时,密码有效,需要设置密码进行验证。
-
开启 protected-mode 保护模式,只能本地访问,若要在外部进行访问,需要配置
bind ip
或者设置访问密码(不设置bind,只设置密码,外部输入密码可以访问,此时bind 相当于设置了 bind 0.0.0.0)。
protected-mode 的配置是 redis 的安全保护措施,不建议设置为no,且为了安全使用,最好再同时设置bind和访问密码。私有云配置bind时,绑定的应该是私有IP地址。