#!/usr/bin/env python
# coding=utf-8
import time
import redis
# 建议redis版本pip install redis==2.10.6
class Redis_Test:
def __init__(self):
# 连接方法一
# self.redpool = redis.ConnectionPool(host='127.0.0.1', port=6379)
# self.db = redis.Redis()
# 连接方法二
self.redpool = redis.Redis(host='127.0.0.1', port=6379)
# 添加
def add_redis(self):
# 存入字符串
# rul = self.redpool.set('age', 2, 10) # 插入单个string类型的键值,有这条数据则会覆盖,
# rul = self.redpool.set('age', 3, 10) # 有效时间10秒,有数据则覆盖
# print(rul)
# decode()把二进制文本转换一下
# print(self.redpool.get('age').decode()) # 取出单条string类型的键值数据
# self.redpool.setnx('name', 'lala') # setnx:没有才添加,有就不变
# print(self.redpool.get('name'))
# rul = self.redpool.mset({'k1': 'v2', 'k2': 'v3'}) # mset批量插入,有则覆盖
# print(rul, self.redpool.get('k1')) # 取的时候要加引号
# self.redpool.incr('age', 3) # 数字自加,每次执行,都在原来的基础上增加3
# print(self.redpool.get('age'))
# hash类型存入
# self.redpool.hset('info', 'tel', '120') # hset:name , key , val 三个参数 给一个name,添加一个键值
# self.redpool.hmset('zhangsan', {'tel': 110, 'addr': 'beijing'}) # hmset:给某个name设置多个键值对
# self.redpool.hmset('zhangsan', {'hobby': 'nicai', 'sex': 'men', 'addr': 'hebei'}) # 再次添加键值时,有则覆盖
# self.redpool.expire('zhangsan', 5) # expire :设置有效时间5秒
# 列表添加数据
# self.redpool.lpush('students', 'zhangsan', 'lisi', 'wangmazi') # lpush:存储顺序相反【'wangmazi','lisi','zhangsan'】
print(self.redpool.rpush('class', '1班', '2班', '3班')) # rpush:正推
# self.redpool.linsert('students', 'BEFORE', 'lisi', 'hehe') # 在lisi前面插入一个hehe
# self.redpool.lpush('class', '1班', '1班') # 可以添加多个重复值
# print(self.redpool.lrange('class', 0, self.redpool.llen('class')))
# 删除
def del_redis(self):
# 删除键值字符串
# self.redpool.delete('age') # 删除某个键值对
# self.redpool.flushall() # 清空
# 删除hash
# print(self.redpool.hdel('zhangsan', 'sex')) # hdel:删除name中的某个键值,删除成功返回1,如果没有返回0
# self.redpool.delete('zhangsan') # 删除某个
# self.redpool.delete('k1', 'k2') # 删除多个
# 删除列表
# self.redpool.lrem('class', '1班', num=2) # 删除name中对应的值,可指定个数
# print(self.redpool.lpop('class').decode()) # 删除第一个值并且有返回值
self.redpool.ltrim('class', 1, 4) # 删除索引小于1,大于4的元素
# 修改
def up_redis(self):
# ret = self.redpool.getset('k1', 'vvv2') # getset:获取原来的值,设置新值
# print(ret)
# print(self.redpool.get('k1'))
# print(self.redpool.getrange('name', 1, 3)) # getrange:对取出的值进行切片,顾头顾尾
# self.redpool.setrange('name', 2, 'll') # 将name对应的值从索引2位置替换,写几位就替换几位
# print(self.redpool.get('name'))
# self.redpool.append('name', '你好') # 向字符串后追加
# print(self.redpool.get('name').decode())
#hash
# self.redpool.hmset('zhangsan', {'hobby': 'nicai', 'sex': 'men', 'addr': 'hebei'}) # 再次添加键值时,有则覆盖
# 列表修改
self.redpool.lset('students', 1, 'xiaoming') # 对某一个位置重新设值
print(self.redpool.lrange('students', 0, 3)) # 再次查看该位置的值会变
# 查询
def find_redis(self):
# 字符串查询
# ret = self.redpool.get('name') # get :通过键取字符串,获取不到,得到None
# print(ret.decode())
# ret = self.redpool.mget('k1', 'k2', 'name') # mget:批量取,返回3个值
# for r in ret:
# print(r.decode())
# print(self.redpool.strlen('name')) # 查看字节长度,注意字节长度和编码有关
# print(self.redpool.get('name').decode()) # 解码成字符串,utf8编码格式,如果有中文,以gbk解码会乱码
# print(self.redpool.keys()) # 查看都有哪些键
# print(self.redpool.keys('k*')) # 查看所有以k开头的键
# print(self.redpool.mget('k1', 'k2', 'name', 'age'))
# hash查询
# print(self.redpool.hget('info', 'tel')) # hget:name,key 两个参数 获取某一个name中的某一个键的值
# print(self.redpool.hmget('zhangsan', ['tel', 'sex', 'addr'])) # hmget:获取某个name中的某些键对应的值
# print(self.redpool.hgetall('zhangsan')) # hgetall:查看该name对应的所有键值
# print(self.redpool.hlen('zhangsan')) # hlen:查看name对应的键值个数
# print(self.redpool.hkeys('zhangsan')) # hkeys:查看name对应的所有键,返回列表
# print(self.redpool.hvals('zhangsan')) # hvals:查看name对应的所有值,返回列表
# print(self.redpool.hexists('zhangsan', 'tel')) # hexists:判断name有没有这个键,返回布尔值
# print(self.redpool.exists('zhangsan')) # exists:判断这个name在不在redis里面
# for item in self.redpool.hscan_iter('zhangsan'): # 一段一段取,redis默认数据超过五百多条时才会做分片处理
# print(item)
# 列表查询
# print(self.redpool.llen('students')) # llen:查看name对应的list有多少个值
# print(self.redpool.lrange('students', 0, -1)) # 查看name对应的list值,从0查到3,一般要全查的话先查看长度,再用长度查
print([i.decode() for i in self.redpool.lrange('class', 0, self.redpool.llen('class') - 1)]) # 减不减1都行,超出了也不报错,也是全查
print(self.redpool.lindex('class', 1).decode()) # 查看对应索引值的元素
if __name__ == '__main__':
mdb = Redis_Test()
# mdb.add_redis()
# mdb.del_redis()
# mdb.up_redis()
mdb.find_redis()
python对reids的操作增删改查
于 2022-04-12 18:23:09 首次发布