centos7服务器配置redis5后台运行,并用python进行远程连接。
远程连接redis,需要提前设置好密码,否则连接不上。网上又说关闭验证功能,但是会降低安全性,不可能这么做的。
操作方法如下:
第一部分:redis配置
- 在redis安装目录下,使用vim打开redis.conf文件。
使用which redis-server
查询安装位置 - 修改如下参数:(没有该文件的话可以到redis的安装包中找,把它拷贝到安装目录下)
找到#requirepass foobared
修改为requirepass <自定义密码>
找到daemonize no
修改为daemonize yes
开启后台运行
找到bind 127.0.0.1
修改为bind 0.0.0.0
(这一步刚开始改错位置了,卡了很久,注意这个bind开头默认没有井号) - /usr/local/redis/bin目录下输入以下指令重启redis:
停止redis:
./redis-cli -h 127.0.0.1 -p <redis端口,默认6379> -a <redis密码> shutdown
启动redis:./redis-server redis.conf
第二部分:防火墙设置:
可以直接关闭防火墙,但是不安全。下面是开启防火墙后的设置。
- 开启防火墙
systemctl start firewalld
- 查看是否开放6379端口,会提示yes或no:
firewall-cmd --query-port=6379/tcp
- 如果没有开启:
firewall-cmd --zone=public --add-port=6379/tcp --permanent
然后firewall-cmd --reload
重启防火墙。 - 重启查看是否开放6379端口.
第三部分:设置安全组
购买的阿里、百度、腾讯等云服务器的,还需要检查服务器管理页面的安全组是否开放了对应端口。
以下为参考配置,开放了6380到6384端口:
至此,操作结束,尝试远程连接即可。
以下为使用python实现的redis消息发布与订阅功能的模块示例
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @File : ./lib/redisPSMode.py
# @Software : PyCharm
# @author : dorlolo
# @contact : 428192774@qq.com
# @Time : 2021/4/16 16:02
import redis
import json
class redisPSMode():
def __init__(self,host,port,db,password=None):
self.__conn = redis.StrictRedis(host=host, port=port, db=db,password=password)
self.channel=None
"""
消息发布
"""
def publishMessage(self,data,channel):
self.channel = channel
if not isinstance(data, str):
msg = json.dumps(data)
self.__conn.publish(self.channel, data)
return True
"""
消息订阅
"""
def subscribe(self,channel): # 定义订阅方法
self.channel = channel
pub = self.__conn.pubsub()
pub.subscribe(self.channel)
pub.parse_response()
return pub
消息订阅:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @File : accept.py
# @Software : PyCharm
# @author : dorlolo
# @contact : 428192774@qq.com
# @Time : 2021/4/16 16:03
from lib.redisPSMode import redisPSMode
#服务器参数
rediserver1 = {
"host": "106.12.81.117",#服务器地址
"port": 6379,#redis端口
"db": 15, #所需连接的redis数据库
"password": "dorlolo911"#redis密码
}
def test_online():
rps = redisPSMode(**rediserver1)
acc = rps.subscribe(["dusthistory","crane1","crane2"])#添加订阅频道
for item in acc.listen(): # 监听状态:有消息发布了就拿过来
if item['type'] == 'message':
print(item)
# print(item['channel'])
# print(item['data'])
if __name__ == '__main__':
test_online()
发布消息:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @File : push.py
# @Software : PyCharm
# @author : dorlolo
# @contact : 428192774@qq.com
# @Time : 2021/4/16 16:02
from lib.redisPSMode import redisPSMode
#自己的服务器测试
rediserver1 = {
"host": "106.12.81.117",#服务器地址
"port": 6379,#redis端口
"db": 15, #所需连接的redis数据库
"password": "dorlolo911"#redis密码
}
if __name__ == '__main__':
rps=redisPSMode(**rediserver1)
"""向dusthistory频道发布消息"""
rps.publishMessage("hello","dusthistory")