python操作redis数据
一、环境安装
1、redispy安装
(automatic) C:\Users\Administrator>pip install redis
2、检测是否安装成功
(automatic) C:\Users\Administrator>python
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AM
D64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import redis
>>>
二、python操作redis
1、创建基类
主要用于连接数据库、数据库单例:
import redis
class RedisBase:
def __new__(cls, *args, **kwargs):
"""单例模式"""
if not hasattr(cls, "instance"):
cls.instance = super(RedisBase, cls).__new__(cls, *args, **kwargs)
return cls.instance
def __init__(self):
"""每一个数据库实例管理一个连接池"""
pool = redis.ConnectionPool(host='192.168.0.104',port=6379,db=0,password='xxx')
self.r=redis.Redis(connection_pool=pool)
2、String操作
class RedisString(RedisBase):
def set(self):
"""设置值"""
result=self.r.set('widh',58)
return result
def get(self):
"""获取值"""
result=self.r.get('width')
return result
def mset(self):
"""设置多个键值对"""
result=self.r.mset(
{
'salary1':5000,
'salary2':6000
}
)
return result
def mget(self):
"""获取多个值"""
result=self.r.mget(
[
'salary1',
'salary2'
]
)
return result
def delete(self):
"""删除键值"""
result=self.r.delete('salary1')
return result
def incr(self):
result=self.r.incr('salary1',20)
return result
2、List操作
class RedisList(RedisBase):
def lpush(self):
result=self.r.lpush(
'l1',*[1,2,3,4,5]
)
return result
def lpop(self):
"""移除最左边的数据并返回"""
result=self.r.lpop('l1')
return result
def lrange(self):
"""获取指定长度的数据"""
result=self.r.lrange('l1',0,-1)
return result
3、Set操作
class RedisSet(RedisBase):
def sadd(self):
"""添加集合,返回的是成员的个数"""
result=self.r.sadd('set1',*[1,2,3,4,5])
return result
def sismember(self):
"""判断一个成员是否是集合的成员,返回布尔值"""
result=self.r.sismember('set1',2)
return result
def smembers(self):
"""返回集合的所有成员"""
result=self.r.smembers('set1')
return result
def sdiff(self):
"""返回与其它集合的差异元素"""
result=self.r.sdiff('s5','s7')
return result
def sinder(self):
"""返回几个集合的交集"""
result=self.r.sinter('s5','s7')
return result
def sunion(self):
"""返回几个集合的并集"""
result=self.r.sunion('s5','s7')
return result
4、完整实例
import redis
class RedisBase:
def __new__(cls, *args, **kwargs):
"""单例模式"""
if not hasattr(cls, "instance"):
cls.instance = super(RedisBase, cls).__new__(cls, *args, **kwargs)
return cls.instance
def __init__(self):
"""每一个数据库实例管理一个连接池"""
pool = redis.ConnectionPool(host='192.168.0.104',port=6379,db=0,password='bright123')
self.r=redis.Redis(connection_pool=pool)
class RedisString(RedisBase):
def set(self):
"""设置值"""
result=self.r.set('widh',58)
return result
def get(self):
"""获取值"""
result=self.r.get('width')
return result
def mset(self):
"""设置多个键值对"""
result=self.r.mset(
{
'salary1':5000,
'salary2':6000
}
)
return result
def mget(self):
"""获取多个值"""
result=self.r.mget(
[
'salary1',
'salary2'
]
)
return result
def delete(self):
"""删除键值"""
result=self.r.delete('salary1')
return result
def incr(self):
result=self.r.incr('salary1',20)
return result
class RedisList(RedisBase):
def lpush(self):
result=self.r.lpush(
'l1',*[1,2,3,4,5]
)
return result
def lpop(self):
"""移除最左边的数据并返回"""
result=self.r.lpop('l1')
return result
def lrange(self):
"""获取指定长度的数据"""
result=self.r.lrange('l1',0,-1)
return result
class RedisSet(RedisBase):
def sadd(self):
"""添加集合,返回的是成员的个数"""
result=self.r.sadd('set1',*[1,2,3,4,5])
return result
def sismember(self):
"""判断一个成员是否是集合的成员,返回布尔值"""
result=self.r.sismember('set1',2)
return result
def smembers(self):
"""返回集合的所有成员"""
result=self.r.smembers('set1')
return result
def sdiff(self):
"""返回与其它集合的差异元素"""
result=self.r.sdiff('s5','s7')
return result
def sinder(self):
"""返回几个集合的交集"""
result=self.r.sinter('s5','s7')
return result
def sunion(self):
"""返回几个集合的并集"""
result=self.r.sunion('s5','s7')
return result
def main():
rs=RedisString()
rs1=RedisString()
rl=RedisList()
rl1=RedisList()
rs=RedisSet()
rs1=RedisSet()
print(rs)
print(rs1)
print(rl)
print(rl1)
print(rs)
print(rs1)
# rs.set()
# rs.mset()
# print( rs.mget())
# print(rs.delete())
# print(rs.incr())
# print(rl.lpush())
# print(rl.lpop())
# print(rl.lrange())
# print(rs.sadd())
# print(rs1.sismember())
# print(rs.smembers())
# print(rs.sdiff())
# print(rs.sinder())
print(rs.sunion())
if __name__ == '__main__':
main()
实例
更多参考:
https://redis-py.readthedocs.io/en/latest/#contents
https://github.com/WoLpH/redis-py
三、Pipelines
pipline 是Redis类的子类,它为在单个请求中向服务器缓冲多个命令提供支持。
redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。
import redis
pool = redis.ConnectionPool(host='192.168.0.104',port=6379,db=0,password='xxx')
r = redis.Redis(connection_pool=pool)
pipe = r.pipeline()#默认事务开启,具备原子性
pipe.set('rr1', 'v1')
pipe.set('rr2', 'v2')
pipe.execute()
更多参考:https://github.com/WoLpH/redis-py
python操作redis数据的更多相关文章
- python 操作redis数据
python 操作redis 各种类型的数据 # encoding:utf-8 import redis import time def main(): """ redi ...
- python操作三大主流数据库(14)python操作redis之新闻项目实战②新闻数据的展示及修改、删除操作
python操作三大主流数据库(14)python操作redis之新闻项目实战②新闻数据的展示及修改.删除操作 项目目录: ├── flask_redis_news.py ├── forms.py ├ ...
- 第三百节,python操作redis缓存-其他常用操作,用于操作redis里的数据name,不论什么数据类型
python操作redis缓存-其他常用操作,用于操作redis里的数据name,不论什么数据类型 delete(*names)根据删除redis中的任意数据类型 #!/usr/bin/env pyt ...
- Python—操作redis
Python操作redis 连接方式:点击 1.String 操作 redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值,默认不存在则创建, ...
- python——操作Redis
在使用django的websocket的时候,发现web请求和其他当前的django进程的内存是不共享的,猜测django的机制可能是每来一个web请求,就开启一个进程去与web进行交互,一次来达到利 ...
- Python操作Redis、Memcache、RabbitMQ、SQLAlchemy
Python操作 Redis.Memcache.RabbitMQ.SQLAlchemy redis介绍:redis是一个开源的,先进的KEY-VALUE存储,它通常被称为数据结构服务器,因为键可以包含 ...
- 数据库之redis篇(3)—— Python操作redis
虽然前面两篇已经说了redis的一些配置安装什么的,篇幅有点长,可能看完了也不知道怎么操作,这里再浓缩一下: 什么是redis redis完全开源免费的,遵守BSD协议,是一个高性能的非关系型key- ...
- python操作redis命令
Python操作redis from redis import StrictRedis, ConnectionPoolredis_url="redis://:xxxx@112.27.10.1 ...
- Python操作Redis及连接方式
前沿:随着互联网的高速发展,数据变得越来越重要,Python成为了人工智能的热门语言,而Nosql数据库已成为日常开发用品. 今天要写的是Python操作Redis Redis的安装我就不介绍了,你可 ...
随机推荐
- 深入Dagger:JavaPoet的使用
前言 最近在用Dagger开发应用,Dagger是google在square的基础上去反射的依赖注入框架. Dagger会根据定义的注解在编译阶段根据依赖注入的配置生成相应的代码,来减少运行期间反射的 ...
- git 版本控制库的用法及其介绍
版本控制 说到版本控制,脑海里总会浮现大学毕业是写毕业论文的场景,你电脑上的毕业论文一定出现过这番景象! 1 2 3 4 5 6 7 8 9 10 11 毕业论文_初稿.doc 毕业论文_修改1.do ...
- (转)Unity Cinemachine插件,实现单目标和多目标之间切换
Unity Cinemachine插件学习笔记,实现单目标和多目标之间切换*版本要求Unity2017.1及以上. 参考资料: [官方] Unity 2017.1正式版发布 Cinemachine插件 ...
- teb教程5
跟随全局规划器 简介:本部分是关于如何配置局部规划器严格跟随全局规划,也包括调节在时优和路径跟随上的权衡. 1.先看一下via-points当前的优化行为:启动下面节点 roslaunch teb_l ...
- KiCAD层颜色修改
KiCAD层颜色修改 KiCAD的PCB各层的颜色太过于暗淡,有时可能不适合操作者的习惯,尤其是铜层(布线层),这时候就需要去修改层的颜色,具体操作如下图:选择想要修改的层,双击左边颜色框框,进入之后 ...
- 说一下HTML5与传统HTML的区别
1.首先说一下什么是HTML5 HTML5 将成为 HTML.XHTML 以及 HTML DOM 的新标准. HTML 的上一个版本诞生于 1999 年.自从那以后,Web 世界已经经历了巨变. HT ...
- vue组件 is ref
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- WPF ItemControl的源与选择项问题
具体场景: datagrid的行中有个combox 每个行是一个实例A 每个行中的SelectedItem是实例A的一个属性B 我希望实现datagrid的复制Command,具体做法是A序列化反序列 ...
- leetcode-12双周赛-1243-数组变换
题目描述: 自己的提交: class Solution: def transformArray(self, arr: List[int]) -> List[int]: if len(arr) & ...
- React中Class的概念
Class的概念 一.简介 javaScript是面向对象的编程语言,可以说所以的能够被描述的事.物或抽象的东西,都是可以是对象.而我们记录的对象,会有具有同样的属性和行为. 为了节省重写相同的代码. ...