python anaconda安装redis_python与redis的初次碰撞——把玩redis数据库的一点心得

本文介绍了如何在Anaconda环境下安装Redis和Redis-Python,详细阐述了从Windows到Linux(CentOS 6.9)搭建Redis服务器的过程,包括配置文件修改、端口开放等关键步骤,并提供了遇到问题时的解决方法,适合初学者学习。
摘要由CSDN通过智能技术生成

Redis是最近几年NoSQL(非关系型数据库)中最异军突起的一位了,在很多大小公司的业务中起了很大的作用。Redis是键值形式的存储系统,跟mongodb的存储方式有些类似(感觉NoSQL似乎都有这个共性?)。Redis主要运行于内存中,因此具有天生的极速性,官方测试速度是8-10万次/秒的读写速度(set/get)。跟MySQL、MongoDB相比,语法更亲和,没有复杂绕口的单词、大括号、中括号、小括号、%#&^$,没有各种跨表查询等等,简直不能更赞。这两天自己把玩了一下redis,一路也算是踩了一些坑,所以写点东西记录一下,给后来者提个醒,也给自己留下点笔记。如果哪里有纰漏、疏忽,还望批评指正!

运行环境:

win10 x64

Pycharm 2017.1

anaconda 4.3.1

Python 3.5.3:需要注意一下,这里不能用3.6.X版本,因为后面的redis-py模块还没有支持这个版本,会报错。截至2017.4.17,redis-py只支持到python 2.7.X和3.5.X。让我们期待模块作者的更新吧;

redis-py 2.10.5模块:连接redis数据库和python的桥梁,这种桥梁有很多,但是这个模块是最常用的一个;

redis 3.2.8:目前稳定版就是3.2.8,最新的4.0版本已发布,添加了更多的高级功能,但是似乎稳定性是个问题;

vmware workstation pro 12.5.5:运行在windows和mac下的虚拟机软件,号称“最好用的”虚拟机。类似的软件还有virtualbox,我用的比较少,主要的测试环境还是习惯在vmware下进行。该软件的功能是在windows、mac系统下创建windows、linux等沙箱环境,便于开发者完成测试工作。

CentOS 6.9:CentOS是linux系统中应用范围最广的系统,在阿里云、腾讯云、百度云中都可以看到。当然了,其他的CentOS版本也是可以的,我在CentOS6.5、6.7中都测试过,完全没问题(因为这个测试完全接触不到这几个系统的核心,所以无所谓啦)。

接下来开始一步一步地开始教程吧。首先是安装vmware,这个不多说,大家自己去官网下载即可。然后是安装centos,大家可以参考这里:

我这里使用的是centos 6.9,下载地址是:centos 6.9。目前国内有非常多的开源镜像站,如果这个下载速度不佳,大家可以尝试其他下载地址,可以自行百度:开源镜像站即可。

在虚拟机中安装好centos以后,开始准备折腾redis了。为什么非要搭建个linux环境,用windows就不能好好玩耍redis了?答案是可以,但是你在windows本体上安装redis,后期会遇到更多的坑。这里就不可避免的聊到redis的作者了,他认为windows本身的封闭和api调用的复杂性太大,如果为了适配windows,必然花费大量的时间。而redis本身是追求高速、自由、简单的,这么做也跟redis的精神不符。所以作者很傲气地拒绝开发适配windows的redis,坚持在linux上进行开发。

如果你非要在windows上使用redis,办法不是没有,你可以看看这里:MSOpenTech/redis。这里是redis的分支,功能基本与redis保持一致,是由windows团队开发的。但是据说问题也不少,而且版本更新也追不上原作者。

接下来是安装redis。在centos中安装还是比较简单的,在终端中执行以下命令即可:

wget http://download.redis.io/releases/redis-3.2.8.tar.gz

#下载安装包

tar xzf redis-3.2.8.tar.gz

#解压

cd redis-3.2.8

#进入解压后的默认目录

make

#执行安装程序

因为这里的centos系统是自带图形化桌面的,所以可以直接打开redis-3.2.8文件夹,修改一下redis.conf文件,才能在外网访问虚拟机的redis数据库。简单说明一下,redis.conf是redis的配置文件。需要修改的地方有以下几处:

1.将所有的bind信息全部屏蔽(注释掉)。这里的bind是指绑定本机ip,默认情况下redis是只允许本机访问的,也是为了安全起见。修改后如下:(我尝试过了,如果不注释掉bind功能,redis就无法通过外网连接,只能在本机上运行)

2.修改防火墙,这里有2个办法,一个是开放redis的6379端口,另一个就是省事地关闭防火墙,我选了后者。在虚拟机中选择系统→管理→防火墙,直接关闭即可(这里需要root密码)。

3.开启守护进程,让redis可以在后台运行。方法是将deamonize no改成deamonize yes。

4.关闭redis的保护模式(protected-mode)。这里的保护模式是指是否允许其他ip的设备访问redis。如果开启的话,就是只允许本机进行访问了。所以要将protected-mode改成no。请注意,这里是测试环境,所以可以关闭保护模式。如果用于生产开发,请务必开启保护模式,这是redis提供的一种自我保护机制!(评论区有爱挑刺的小伙伴,所以这里提示一下)

5.设置redis数据库的密码。如果只是linux本机调试,可以跳过这一步。但是如果要开放外网访问redis,就必须给redis添加密码。好像这是redis近期版本的更新内容,因为redis作者认为开放了所有的外网权限但是不添加密码,这样的数据库无疑就是活靶子,所以强制添加密码,否则在外网访问时会发生“服务器积极拒绝”的错误。我没有测试过其他版本的redis,如果这个地方如果解释的不对,恳请指出。方法是将requirepass取消注释,添加上你的密码,如下:

再次重申,以上操作步骤均基于学习环境,正式的公司测试机、开发机请不要如此设置,这样做相当于关闭了所有的安全机制,很容易发生被黑的后果!

经此五步,redis的配置文件修改完成。重新打开终端,接下来开启redis的服务端:

cd redis-3.2.8

#进入redis目录

cd src

#进入src目录,这是redis程序的主目录之一

./redis-server

开启redis服务端

然后会显示下图的提示,出现The server is now ready to accept connections on port 6379,就说明服务端开启成功啦。

如果你要在linux虚拟机上测试一下redis,可以开启一个新的终端:

cd redis-3.2.8

cd src

./redis-cli

就开启了redis的本机客户端,最简单的测试办法就是输入ping,如果客户端返回pong,就说明程序正常运行。

接下来就是从外网连接进入虚拟机了。首先需要确定虚拟机redis的ip,这样才好连接。重新开启一个终端,输入ifconfig(不是ipconfig!),获取linux终端的ip地址如下:

将ip记下来,客户端就可以关掉了。接下来就是通过pycharm调用redis-py模块,访问redis了。

简单说一下redis-py模块。这个模块的名称是redis-py,但是在python中的导入名是import redis。目前支持到python 2.7.X和3.5.X。如果用python 3.6.X是会报错的,我已经试过了。(2017.5.8修改:目前redis-py模块可以“硬安装”,就是直接把redis-py模块文件夹复制到anaconda的lib里,经测试也可以正常使用,但是某些高级特性会不支持)因为我使用的是anaconda环境包,所以直接在pycharm的terminal中输入安装命令就可以了:

conda install -c conda-forge redis-py=2.10.5

最后重启一下虚拟机,在windows下的pycharm中测试跑一下:

import redis

r = redis.Redis(host='10.40.0.124',port=6379,db=0, password='123456')

#创建Redis类下的实例,4个参数分别是主机地址、端口、数据库(redis默认有16个数据库,第一的编号就是0)、redis刚才设置的连接密码

r.set('a','1')

#最基本的命令,设置一个新的键值对,相当于python里的a=1

print(r.get('a'))

#获取a键的值,相当于python的 print (a)

运行结果,成功!到此,python和redis基本实现了无缝衔接!

在折腾redis时,可能会发生这样的错误:

Creating Server TCP listening socket *:6379: bind: Address already in use

说明服务端被不正确的关闭了,所以显示6379端口占用。这里有两个处理方法:

方法一:在客户端上输入shutdown命令,来关闭服务端。这样做是最合适的,这时的服务端会自动处理、保存相关数据。

方法二:可以查找一下redis服务端的进程,然后杀掉该进程,就可以重新开启服务端啦。还是说明一下,这是基于学习环境,不要用于生产环境。因为强制杀掉进程的话,会导致redis数据丢失。具体如下:

ps -e|grep redis

#关于这个命令的详解,可以看这里:linux命令大全——ps命令详解。这里的redis字段是模糊查询,查找redis服务端的进程,如果找到了,会返回端口信息

然后结束该进程就可以啦。输入:

kill -9 3534

就可以重新开启redis服务端了。

如果又双叕修改了redis的配置文件redis.conf怎么办?难道每修改一次就要重启一次虚拟机?No,只需要重启一下redis服务端即可。关闭redis服务端以后,重新打开终端:

cd redis-3.2.8

cd src

#这是进入到redis-server的目录中

./redis-server ../redis.conf

#意思是运行当前目录的服务端,参数值为上级目录的redis.conf文件

运行后如果正常是不会显示任何内容的。那怎么查看服务端是否开启呢?还是之前的查进程命令:

ps -e|grep redis

这时候就会显示redis-server进程了:

此外,最有可能碰到的错误,就是cmd中显示:redis.exceptions.ConnectionError: Error 10061 connecting to 10.40.0.124:6379. 由于目标计算机积极拒绝,无法连接。

这个问题产生的原因有很多种,但99%是以下的问题:

1.虚拟机防火墙没有设置好:需要关闭,或者开放6379端口;

2.python中Redis类下的实例参数错误,比如host错误、db漏写、password错误等,这个需要自行检查;

3.虚拟机中的redis.conf没有设置好:请按照之前的几个设置方法再来一遍。

如此这般,redis也就算是会用了。

这一路走来,折腾了一两天,才算是彻底弄明白虚拟机内外通信的基本原理,以及redis的运行方式,希望也能对大家有所帮助,谢谢!

我的其他文章:

Scrapy爬虫框架入门教程(1)——爬取廖雪峰老师的博客

用python写爬虫,爬取清纯妹子网站(requests/lxml)

Python入门——针对零基础学习者的资料推荐

python与redis的初次碰撞——把玩redis数据库的一点心得

欢迎加QQ群:613081176,纯技术交流,杜绝广告、刷屏、机器人

点个赞再收藏呀,亲!现在点赞1000+,收藏突破2000+,真有点无语哎!

欢迎关注微信订阅号:python程序员之路

介绍python最新的功能、模块,详解实用代码。主要针对python的初级和中级爱好者。更新频率不会太高,绝不推送广告。有我在,成长的路上不会孤单!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值