Python与Redis的交互

具体操作大致分为三步:

以下步骤全在在项目文件所在虚拟环境中进行

安装Redis

调用模块

进行交互操作

安装Redis的三种方法:

第一种:进入虚拟环境,联网安装包redis(推荐)

pip install redis

第二种:进入虚拟环境,联网安装包redis

easy_install redis

第三种:到中文官网-客户端下载redis包的源码,使用源码安装

一步步执行 wget http://github.com/andymccurdy/redis-py/archive/master.zip

unzip master.zip

cd redis-py-master

sudo python setup.py install

调用模块

引入模块

from redis import StrictRedis

这个模块中提供了StrictRedis对象(Strict严格),用于连接redis服务器,并按照不同类型提供 了不同方法,进行交互操作

StrictRedis对象方法:

通过init创建对象,指定参数host、port与指定的服务器和端口连接,host默认为localhost,port默认为6379,db默认为0

sr = StrictRedis(host='localhost', port=6379, db=0)

StrictRedis根据不同的value类型,拥有不同的实例方法可以调用,与redis命令对应,方法需要的参数 与 命令的参数一致

以string类型为例进行交互操作

准备工作:

在桌面上创建redis目录

使用pycharm打开 redis目录

创建redis_string.py文件

具体增加string类型值的代码如下:

from redis import StrictRedis

if name=="main":

try:

#创建StrictRedis对象,与redis服务器建立连接

sr=StrictRedis() # 默认主机本地,端口号6379,第0个库(共16个)

#添加键what,值为我好帅

result=sr.set('what','我好帅')

#输出响应结果,如果添加成功则返回True,否则返回False

print(result)

except Exception as e:

print(e)

下面是对 获取/更改/删除 string类型值的补充

获取:

result = sr.get('name')

#输出键的值,如果键不存在则返回None

print(result)

更改:

result = sr.set('name','itcast')

#输出响应结果,如果操作成功则返回True,否则返回False

print(result)

删除:

result = sr.delete('name')

#输出响应结果,如果删除成功则返回受影响的键数,否则则返回0

print(result)

同时设置/获取多个键值:mset({n个键值对}) / mget([n个键])

sr.mset({'model1': '11', 'model2': '22','model3':'33'}) # 设置

res1, res2, res3 = sr.mget(['model1', 'model2', 'model3']) # 获取

print(res1,res2,res3) # 打印 '11' '22' '33'

设置过期时间:setex(键,时间/秒,值)

# 为键值设置过期时间

sr.setex('time', 3600, '10点整')

拼接:append('键','值')

# age 的初始值是19

# 拼接值 值得结果是age为1920

sr.append('age', '20')

(2)hash类型在交互中的crud语句演示:

设置/获取单个: hset('key','field','value') / hget('key','filed')

sr.hset('python','ma','男') # 设置

res_hx = sr.hget('python','ma') # 获取

print(res_hx) # 打印结果:'男'

设置/获取多个hash值:

sr.hmset('fruit',{'bnana':'yello','apple':'red','orange':'orage'}) #设置

hres1,hres2,hres3 = sr.hmget('fruit',['bnana','apple','orange']) #获取

print(hres1,hres2,hres3) #打印结果 b'yello' b'red' b'orange'

获取key映射下的所有键值对:

#获取键fruit映射的所有键值对

res_dir = sr.hgetall('fruit')

print(res_dir) # 结果{b'apple': b'red', b'bnana': b'yello',b'orange':'orange'}

获取key映射的键值对个数:

nums = sr.hlen('fruit')

print(nums) # 结果 3

删除key field 对应的值:hdel('key','field') /与string类型有区别

sr.hdel('fruit','orange')

print(exists('fruit','orange')) # 打印结果是0 1代表存在

print(exists('fruit')) # 1 因为键fruit还存在 映射'bnana','apple'

查看key映射下的所有field:

res = sr.hkeys('fruit')

print(res) # ‘bnana’ ‘apple’ ‘orange’

查看key映射下的所有value

res = sr.vals('fruit')

print(res) # 'yellow' 'red' 'orange'

(3)针对 键 的操作(适用于任何类型):

exists / type / delete / expire / getrange / ttl

sr.exists('python')# 1代表存在 0代表不存在

sr.delete('python') # 删除键python及其所有映射

sr.expire('python','3') # 指定python 的过期时间为3秒

sr.ttl('python') # 查看过期时间

sr.type('python')

终端命令:删除当前数据库所有的key 执行flushdb ,删除所有数据库的 执行flushal

另外,以上所有命令均适用于终端命令行(终端命令行自动提示)

补充1:终端删除键用 :del key, 不过哈希对field的删除要用: hdel key field 完成

补充2:交互删除键用delete('key'), 对哈希类型中field 的删除用 hdel('key','field') ,因为在哈希类型中一个key可能对应多个field