发布于2020-03-13 11:38 阅读(979) 评论(0) 点赞(10) 收藏(4)
像操作Python list一样操作Redis list。
数据结构:Redis列表LIST
功能:增删改查
redis_dal.py
# -*- coding: utf-8 -*-
# @Author : XerCis
# @Time : 2020/3/11 20:00
# @Function: Redis数据访问层
import json
import redis
class RedisDAL():
def __init__(self, host='localhost', port=6379, db=0, password=None, charset='UTF-8', expire=86400, max=10):
self.host = host
self.port = port
self.db = db
self.password = password
self.charset = charset
self.db = redis.StrictRedis(host, port, db, password, charset=charset, decode_responses=True)
self.expire = expire # 过期时间,默认86400(24小时)
self.max = max # 每个键允许存储的最大条数,默认10
def __repr__(self):
return self.__str__()
def __str__(self):
return '{} {}'.format(__class__.__name__, self.__dict__)
def __len__(self):
'''库中键的数量'''
return self.db.dbsize()
@property
def expire(self):
return self._expire
@expire.setter
def expire(self, expire):
if not isinstance(expire, int):
raise TypeError
self._expire = expire
@property
def max(self):
return self._max
@max.setter
def max(self, max):
if not isinstance(max, int):
raise TypeError
self._max = max
def create(self, name, value):
'''增,含新增和添加
:param name: 键名
:type name: str
:param value: 可被json转换的任意值
:return 是否成功
:rtype: bool
'''
value_str = json.dumps(value, ensure_ascii=False)
try:
if self.db.llen(name) == 0:
# 空的话右插并设置过期时间
self.db.rpush(name, value_str)
else:
# 非空
if self.db.llen(name) < self.max:
# 还能放
self.db.rpush(name, value_str)
else:
# 放不下左弹再右插
self.db.lpop(name)
self.db.rpush(name, value_str)
self.db.expire(name, self.expire)
except Exception as e:
print(str(e))
return False
return True
def read(self, name, start=0, end=-1):
'''查
:param name: 键名
:param start: 起点
:param end: 终点
:return: 指定范围的列表
:rtype: list
'''
result = self.db.lrange(name, start, end)
result = [json.loads(i) for i in result]
return result
def update(self, name, value, index=-1):
'''改
:param name: 键名
:param value: 可被json转换的任意值
:param index: 下标,默认修改最后一个
:return 是否成功
:rtype: bool
'''
value_str = json.dumps(value, ensure_ascii=False)
try:
result = self.db.lset(name, index, value_str)
except Exception as e:
print(str(e))
return False
return result
def delete(self, name, num=1):
'''删,优先删除旧数据
:param name: 键名
:param num: 条数
:return: 删掉的内容
:rtype: list or False
'''
if name == '*':
# 防止SQL注入
return False
result = []
if self.db.exists(name) == False:
# 不存在该键
return False
exist_len = self.db.llen(name) # 剩余条数
num = min(num, exist_len, self.max) # 能取的最大条数
try:
for i in range(num):
value_str = self.db.lpop(name) # 左弹
value = json.loads(value_str)
result.append(value)
except Exception as e:
print(str(e))
return False
return result
def length(self, name):
'''给定键查询长度
:param name: 键名
:return: 长度
:rtype: int
'''
return self.db.llen(name)
def get_names(self):
'''所有键名'''
return self.db.scan()[1]
def empty(self):
'''清空'''
command = input(r'数据库共有{}条数据,确认清空请输入(确认): '.format(len(self)))
if command == '确认':
if self.db.flushdb():
print('清空成功')
else:
print('清空失败')
if __name__ == '__main__':
'''初始化'''
redisDAL = RedisDAL()
print(redisDAL)
'''设置过期时间和最大条数'''
redisDAL.expire = 10000 # 过期时间,单位s
redisDAL.max = 20 # 每个键允许存储的最大条数
print('过期时间: {}s'.format(redisDAL.expire))
print('每个键存储的最大条数: {}'.format(redisDAL.max))
'''增'''
name = '小明'
value = {'语文': 70, '数学': 80, '英语': 90}
redisDAL.create(name, value) # 新增
value = {'物理': 70, '化学': 80, '生物': 90}
redisDAL.create(name, value) # 添加
name = '小红'
value = {'语文': 80, '数学': 90, '英语': 100}
redisDAL.create(name, value) # 新增
names = redisDAL.get_names()
num = len(redisDAL) # 数据库的键的数量
print('数据库共有{}个键,分别是: {}'.format(num, names))
'''查'''
name = '小明'
num = redisDAL.length(name) # 键的对应值的数量
print('小明的成绩共{}条,分别是: {}'.format(num, redisDAL.read(name)))
'''改'''
name = '小明'
value = {'语文': 100, '数学': 100, '英语': 100}
redisDAL.update(name, value, index=0)
print('小明的成绩修改后: {}'.format(redisDAL.read(name)))
'''删'''
name = '小明'
num = 1
result = redisDAL.delete(name, num)
print('小明的成绩删除{}条: {}'.format(num, result))
print('小明的成绩删除后: {}'.format(redisDAL.read(name)))
'''清空'''
redisDAL.empty()
原文链接:https://blog.csdn.net/lly1122334/article/details/104815145
作者:恋爱后女盆友的变化
链接:https://www.pythonheidong.com/blog/article/256183/439ccd8948e7c3797dc9/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!