我们一起来学习redis吧【redis的启动和关闭,配置文件详解】【redis.windows.conf和redis.windows-service.conf文件的区别】

1:redis的安装

1.1:redis在window系统的安装

省略,可以自行百度
我这里安装的压缩版

1.2:redis在linux系统的安装

现在还没有用到,用到了再补上TODO

2:redis的服务启动

2.1:在windows系统中

启动redis服务端
使用cmd进入到redis的安装目录

redis-server.exe redis.windows.conf

可以在windows系统中编写一个启动文件,可以把该指令写入到startup.cmd文件中

启动redis客户端
重新启用一个cmd会话窗口,进入到redis的安装目录

redis-cli –h IP地址 –p 端口 -a 密码	//默认IP本机 端口6379 密码在配置文件中自定义
redis-cli -h 127.0.0.1 -p 6379 -a 123456

在这里插入图片描述

2.2:在linux系统中

启动redis服务器端
进入对应的安装目录

cd .....
方式一
./bin/redis-server
方式二
./bin/redis-server ./redis.conf

启动客户端
进入Redis客服端(Clone Session克隆一个窗口) 进入对应的安装目录

redis-cli –h IP地址 –p 端口 -a 密码	//默认IP本机 端口6379 密码在配置文件中配置

退出客户端命令:Ctrl+C

3:redis的关闭

在windows环境中

服务端:
redis-server --service-stop

在linux环境中

方式一

(断电、非正常关闭。容易数据丢失) 查询redis进程id

ps -ef | grep -i redis
//kill对 查询的id进行强制关闭
kill -9 PID

方式二
(正常关闭、数据保存)
关闭redis服务,通过客户端进行shutdown
如果redis设置了密码,需要先在客户端通过密码登录,再进行shutdown即可关闭服务端
我们一起来学习redis吧【redis的启动和关闭,配置文件详解】【redis.windows.conf和redis.windows-service.conf文件的区别】_第1张图片

4:远程连接

远程连接比较流行的软件: RedisDesktopManager
默认不允许远程连接,需要修改一下信息才可以进行修改

bind 127.0.01	注释掉 允许除本机外的机器访问Redis服务
requirepass 设置密码 设定数据库密码 (有些情况下不设定密码是无法进行远程连接访问的)

5:redis中redis.windows.conf和redis.windows-service.conf文件的区别

我们一起来学习redis吧【redis的启动和关闭,配置文件详解】【redis.windows.conf和redis.windows-service.conf文件的区别】_第2张图片
Windows版的Redis有2个配置文件,一个是:redis.windows.conf,另一个是redis.windows-service.conf。

由于安装版的Redis服务自启动,是直接通过redis-server.exe启动的,但是,启动时并没有加载Redis的配置文件(redis.windows.conf),导致redis 中bind配置和密码设置不生效。
Redis自启动导致的常见的问题有:

1、在CMD命令加载配置文件(redis.windows.conf)进行启动是不成功的。提示如下:

D:\soft\Redis>redis-server.exe redis.windows.conf  
[13760] 11 Jul 16:39:51.067 # Creating Server TCP listening socket 127.0.0.1:6379: bind: No error  

因为Redis服务已经自启动,这里是不会再新启动的,故加载配置文件是失败的。也没有出现Redis启动的小盒子(下面有图片,慢慢往下看),需要注意的是Windows版的Redis安装时,默认启动加载的配置文件是redis.windows-service.conf,如下图所示:
我们一起来学习redis吧【redis的启动和关闭,配置文件详解】【redis.windows.conf和redis.windows-service.conf文件的区别】_第3张图片
2、密码失效。虽然在配置文件(redis.windows.conf)设置了密码,密码为123456:

################################## SECURITY ###################################  
……省略……  
# requirepass foobared  
requirepass 123456  

但启动客户端进行Redis命令操作时,是不需要密码的,也没有提示无权限操作,这是一个严重的安全问题。

D:\soft\Redis>redis-cli.exe  
127.0.0.1:6379> get name  
"haha"  
127.0.0.1:6379>  

3、Redis访问IP绑定(bind)无效
Redis默认绑定的ip为127.0.0.1,但如果想内网的机器都能访问,则需要设置内网的ip地址,如192.168.100.66,然后redis.host则可以设置为192.168.100.66访问Redis。
Redis ip地址绑定默认说明:

################################## NETWORK #####################################  
  
# By default, if no "bind" configuration directive is specified, Redis listens  
# for connections from all the network interfaces available on the server.  
# It is possible to listen to just one or multiple selected interfaces using  
# the "bind" configuration directive, followed by one or more IP addresses.  
#  
# Examples:  
#  
# bind 192.168.1.100 10.0.0.1  
# bind 127.0.0.1 ::1  
#  
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the  
# internet, binding to all the interfaces is dangerous and will expose the  
# instance to everybody on the internet. So by default we uncomment the  
# following bind directive, that will force Redis to listen only into  
# the IPv4 lookback interface address (this means Redis will be able to  
# accept connections only from clients running into the same computer it  
# is running).  
#  
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES  
# JUST COMMENT THE FOLLOWING LINE.  
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
bind 127.0.0.1  

主要是意思是,如果设置了bind,只能通过绑定的地址访问Redis。

如果不设置bind,则所有地址都可以访问,如果在项目部署外网,所有人都可以访问到,所以这里也是个注意的地址,还是设置bind比较安全。

绑定多个ip地址:

bind 127.0.0.1 192.168.100.66  

127.0.0.1和192.168.100.66之间通过空格分隔,不是逗号。
但如果Redis是自启动的,没有加载配置文件(redis.windows.conf)启动,这里的设置也是无效的。
如果不绑定ip地址(192.168.100.66),直接设置redis.host=192.168.100.66是访问不了的,出现以下的错误:
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

所以说,Redis由Windows自启动的,配置文件(redis.windows.conf)的设置都是无效的

五、解决方案:

1、禁用Redis的自启动,设置为手动
2、不要使用Redis安装版,使用压缩版
3、通过命令行CMD加载配置文件(redis.windows.conf)启动

D:\soft\Redis>redis-server.exe redis.windows.conf  

4、再新打开一个cmd(不要关闭之前打的Cmd窗口),启动Redis客户端:

D:\soft\Redis>redis-cli.exe  

5、获取Redis中某个key的值,提示无权限。

127.0.0.1:6379> get name  
(error) NOAUTH Authentication required.  
127.0.0.1:6379>  

通过密码进入访问,使用 auth + 密码,如下:

127.0.0.1:6379> get name  
(error) NOAUTH Authentication required.  
127.0.0.1:6379> auth 123456  
OK  
127.0.0.1:6379> get name  
"haha"  
127.0.0.1:6379>  

六、如果不是安装版的Redis,又想让Redis自启动的时候,可以向Windows添加自启动服务:
1、进入到Redis的安装目录

D:\soft\Redis>  

2、执行命令:

redis-server --service-install redis.windows.conf --loglevel notice --service-name Redis 

完整实例指令:

D:\soft\Redis>redis-server --service-install redis.windows.conf --loglevel notice --service-name Redis  

–service-install redis.windows.conf 指定redis配置文件
–loglevel notice 指定日志级别
–service-name Redis 指定服务名称
运行结果如下( Redis successfully installed as a service.):

D:\soft\Redis>redis-server --service-install redis.windows.conf --loglevel notice --service-name Redis  
[7176] 12 Jul 09:34:50.730 # Granting read/write access to 'NT AUTHORITY\NetworkService' on: "D:\soft\Redis" "D:\soft\Redis\"  
[7176] 12 Jul 09:34:50.730 # Redis successfully installed as a service. 

4、安装服务后,默认不是马上启动的,但启动类型是自启动,如果想马上启动,请执行命令:

redis-server --service-start 
服务成功启动显示如下:  
[9876] 12 Jul 09:57:41.251 # Redis service successfully started.  

或者重启电脑。

5、删除Redis服务:
redis-server --service-uninstall

5:redis的配置文件讲解

redis.windows.conf文件中

#redis的配置

#Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
daemonize yes
#当Redis以守护进程方式运行时,Redis默认会把pid写入redis.pid文件,可以通过pidfile指定
pidfile 'E:/xxx/redis/redis_pid/redis.pid'
#端口
port 6379
#绑定主机的ip地址
bind 127.0.0.1
#当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 300
#指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel notice
#日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null
logfile stdout
#设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id
databases 16
#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
#分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改
save 900 1
save 300 10
save 60 10000
#指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbcompression yes
#指定本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
#指定本地数据库存放目录
dir 'D:/XXX/redis/redis_database'
#设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
#slaveof 127.0.0.1 6379
#当master服务设置了密码保护时,slav服务连接master的密码
#masterauth 123456
#设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭
#requirepass foobared
#设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
maxclients 10000
#指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
maxmemory 300m
#指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendonly yes
#指定更新日志文件名,默认为appendonly.aof
appendfilename 'appendonly.aof'
#指定更新日志条件,共有3个可选值
#no:表示等操作系统进行数据缓存同步到磁盘(快) 
#always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
#everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec

你可能感兴趣的:(redis知识点,redis)