前段时间,学习 scrapy 框架入门的时候, 连接Redis 没有连接成功, 但是还不知道怎么弄, 留下了疑问.昨晚学习异步编程的时候, 异步操作Redis 的时候, 发现了问题, 总算是解决了之前遗留下来的连接问题.

安装Redis和配置网络

安装Centos7

安装Centos7 , 我就不重复讲了,B站上面会有讲解的, 对着视频一步一步傻瓜式操作即可.

配置网络

在VM15 左上角的编辑中点击虚拟网络管理器, 改成NAT 模式, 子网 ip 改成 192.168.88.0
配置DHCP 设置, 起始 IP 改成 192.168.88.1 , 结束IP 改成192.168.88.254
然后去修改 Windows 的网络设置, 点击以太网, 点击更改适配器选项, 选中 Vmnet8, 右键属性, 选择 Internet 网络协议版本4 (TCP/IPv4),
把Ip地址改成 192.168.88.1 , 默认网关改成 192.168.88.2

验证网络

在 Centos 上, Ping 一下百度即可

虚拟机更换宿主机之后或者本地windows重装系统之后

都要把上面的配置网络流程走一次, 除非你虚拟机设置了快照, 那也需要在windows上重新配置一下.

安装Redis数据库

Redis历史版本下载 我安装的是Redis 5,
安装步骤一: 安装 gcc , 切换到root 用户, 执行 yum -y install gcc
步骤二: 把Redis 压缩包传递到 /usr/local 目录下, 推荐使用 xtfp , 或者用 git 命令或其他工具都行
步骤三: 去到 /usr/local 目录下,解压安装包 tar -zxvf redis-5.0.0.tar.gz
步骤四: 进到解压后的目录, 使用make 命令进行编译 cd redis-5.0.0/ 然后运行 make 进行编译
步骤五: 安装Redis, 进行Redis 下的src 目录后运行 make install 进行安装
步骤六:关闭防火墙 systemctl stop firewalld.service , firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
步骤七: 运行Redis ./redis-server
步骤八: 修改 redis配置文件 , 用xftp 将配置文件传递一份到桌面,先复制保存一份,然后修改配置文件
daemonize yes --- 后台启动Redis
protected-mode no 关闭保护模式
requirepass foobared 远程连接密码, 这一行的前后 # 都要删掉, 然后将其顶格
步骤九: 将新的redis.conf 传递到Centos7上 替换旧的配置文件
步骤十:启动Redis的时候重新加载配置文件(进到src 目录下) ./redis-server ../redis.conf
步骤十一: 启动 redis 客户端(redis 要开启后台运行,否则没法使用客户端,不然就需要新开一个窗口)
在 redis的src 目录下, ./redis-cli 开启客户端, exit 退出客户端
步骤十二: Redis创建软链接
ln -s /usr/share/redis-5.0.8/src/redis-server /usr/bin/redis-server
ln -s /usr/share/redis-5.0.8/src/redis-cli /usr/bin/redis-cli

此时在任何目录下都可以使用redis命令了,而无需进入redis的安装目录下使用命令了。只是这样开启的服务端不是在后台运行的, 需要新开一个窗口运行客户端.

redis 登陆客户端后报错,NOAUTH Authentication required.

这是说我们没有通过密码登陆, 需要授权.
方法是: 在客户端, 执行 auth password(配置文件中的密码)

异步操作 redis

import asyncio
import aioredis

async def connetRedis(address, password):
    print("开始连接", address)
    # 网络IO操作: 创建Redis 连接
    redis = await aioredis.create_redis(address, password=password)

    # 网络IO 操作, 在 Redis中设置哈希值car
    await redis.hmset_dict('car', key1=1, key2=2, key3=3)
    #  IO 操作, 在Redis中获取值
    result = await redis.hgetall('car', encoding='utf-8')
    print(result)
    redis.close()
    # 网络IO, 关闭 redis 连接
    await redis.wait_closed()
    print("结束", address)

loop = asyncio.get_event_loop()
loop.run_until_complete(connetRedis('redis://192.168.88.10', "foobared"))
#  这样就会参数错误
# loop.run_until_complete(connetRedis('192.168.88.10', "foobared"))

connetRedis('redis://192.168.88.10', "foobared") , 服务器ip 不能直接写 ip , 前面要有redis:// , "foobared" 就是配置文件中的连接密码.