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