转自:使用python来操作redis用法详解

class CommRedisBase():
def __init__(self):
REDIS_CONF = {}
connection_pool = redis.ConnectionPool(**REDIS_CONF)
self._client = redis.Redis(connection_pool=connection_pool)

CommRedisBase()

1.字符类

class StringRedisClass(CommRedisBase):
'''
字符类
''' def set(name, value, ex=None, px=None, nx=False, xx=False)
'''
ex: 过期时间(秒)
px: 过期时间(毫秒)
nx: 如果设置为True: 则只有name不存在时: 当前set操作才执行
xx: 如果设置为True: 则只有name存在时: 当前set操作才执行
''' def setnx(name, value)
'''
设置值: 只有name不存在时: 执行设置操作(添加)
''' def setex(name, value, time)
'''
time: 过期时间(数字秒 或 timedelta对象)
''' def psetex(name, time_ms, value)
'''
time_ms: 过期时间(数字毫秒 或 timedelta对象)
''' def mset(*args, **kwargs)
'''
批量设置值
''' def mget(keys, *args)
'''
批量获取
''' def getset(name, value)
'''
设置新值并获取原来的值
''' def getrange(key, start, end)
'''
获取子序列(根据字节获取: 非字符)
参数:
name: Redis 的 name
start, 起始位置(字节)
end, 结束位置(字节)
''' def setrange(name, offset, value)
'''
修改字符串内容: 从指定字符串索引开始向后替换(新值太长时: 则向后添加)
参数:
offset: 字符串的索引: 字节(一个汉字三个字节)
value: 要设置的值
''' def setbit(name, offset, value)
'''
对name对应值的二进制表示的位进行操作
参数:
name: redis的name
offset: 位的索引(将值变换成二进制后再进行索引)
value: 值只能是 1 或 0
''' def getbit(name, offset)
'''
获取name对应的值的二进制表示中的某位的值 (0或1)
''' def bitcount(key, start=None, end=None)
'''
获取name对应的值的二进制表示中 1 的个数
参数:
key: Redis的name
start 字节起始位置
end: 字节结束位置
''' def bitop(operation, dest, *keys)
'''
获取多个值,并将值做位运算,将最后的结果保存至新的name对应的值 参数:
operation,AND(并) 、 OR(或) 、 NOT(非) 、 XOR(异或)
dest, 新的Redis的name
*keys,要查找的Redis的name
''' def strlen(name)
'''
返回name对应值的字节长度(一个汉字3个字节)
''' def incr(self, name, amount=1)
'''
自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。
参数:
name,Redis的name
amount,自增数(必须是整数)
注:同incrby
应用场景 – 页面点击数
假定我们对一系列页面需要记录点击次数。例如论坛的每个帖子都要记录点击次数,而点击次数比回帖的次数的多得多。如果使用关系数据库来存储点击,可能存在大量的行级锁争用。所以,点击数的增加使用redis的INCR命令最好不过了。
当redis服务器启动时,可以从关系数据库读入点击数的初始值(12306这个页面被访问了34634次)
''' def incrbyfloat(self, name, amount=1.0)
'''
自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。
参数:
name,Redis的name
amount,自增数(浮点型)
''' def decr(self, name, amount=1)
'''
自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减。
参数:
name,Redis的name
amount,自减数(整数)
''' def append(key, value)
'''
在redis name对应的值后面追加内容
参数:
key, redis的name
value, 要追加的字符串
'''

StringRedisClass

2.hash类

class HSetRedisClass(CommRedisBase):
'''
hash集合类
'''
def hset(name, key, value)
'''
单个增加--修改(单个取出)--没有就新增,有的话就修改
name对应的hash中设置一个键值对(不存在,则创建;否则,修改)
参数:
name,redis的name
key,name对应的hash中的key
value,name对应的hash中的value
注:
hsetnx(name, key, value),当name对应的hash中不存在当前key时则创建(相当于添加)
''' def hmset(name, mapping)
'''
批量增加
在name对应的hash中批量设置键值对
参数:
name,redis的name
mapping,字典,如:{'k1':'v1', 'k2': 'v2'}
''' def hget(name,key)
'''
在name对应的hash中获取根据key获取value
hmget(name, keys, *args)
在name对应的hash中获取多个key的值
参数:
name,reids对应的name
keys,要获取key集合,如:['k1', 'k2', 'k3']
*args,要获取的key,如:k1,k2,k3
''' def hgetall(name)
'''
获取name对应hash的所有键值
''' def hlen(name)
'''
获取name对应的hash中键值对的个数
''' def hkeys(name)
'''
获取name对应的hash中所有的key的值
''' def hvals(name)
'''
获取name对应的hash中所有的value的值
''' def hexists(name, key)
'''
检查name对应的hash是否存在当前传入的key
''' def hdel(name,*keys)
'''
将name对应的hash中指定key的键值对删除
''' def hincrby(name, key, amount=1)
'''
自增name对应的hash中的指定key的值,不存在则创建key=amount
参数:
name,redis中的name
key, hash对应的key
amount,自增数(整数)
''' def hincrbyfloat(name, key, amount=1.0)
'''
自增name对应的hash中的指定key的值,不存在则创建key=amount
参数:
name,redis中的name
key, hash对应的key
amount,自增数(浮点数)
自增name对应的hash中的指定key的值,不存在则创建key=amount
''' def hscan(name, cursor=0, match=None, count=None)
'''
增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,并非一次性将数据全部获取完,从而放置内存被撑爆
参数:
name,redis的name
cursor,游标(基于游标分批取获取数据)
match,匹配指定key,默认None 表示所有的key
count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
如:
第一次:cursor1, data1 = r.hscan('xx', cursor=0, match=None, count=None)
第二次:cursor2, data1 = r.hscan('xx', cursor=cursor1, match=None, count=None)
...
直到返回值cursor的值为0时,表示数据已经通过分片获取完毕
'''
def hscan_iter(name, match=None, count=None)
'''
利用yield封装hscan创建生成器,实现分批去redis中获取数据
参数:
match,匹配指定key,默认None 表示所有的key
count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
'''

HSetRedisClass

3.List

class ListRedisClass(CommRedisBase):
'''
redis集合List
'''
def lpush(name,values)
'''
增加(类似于list的append,只是这里是从左边新增加)--没有就新建
在name对应的list中添加元素,每个新的元素都添加到列表的最左边
''' def rpush(name,values)
'''
增加(从右边增加)--没有就新建
''' def lpushx(name,value)
'''
往已经有的name的列表的左边添加元素,没有的话无法创建
在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边
''' def lpushx(name,value)
'''
往已经有的name的列表的右边添加元素,没有的话无法创建
''' def linsert(name, where, refvalue, value)
'''
在name对应的列表的某一个值前或后插入一个新值
参数:
name,redis的name
where,BEFORE或AFTER
refvalue,标杆值,即:在它前后插入数据
value,要插入的数据
''' def lset(name, index, value)
'''
对name对应的list中的某一个索引位置重新赋值
参数:
name,redis的name
index,list的索引位置
value,要设置的值
''' def lrem(name, value, num)
'''
在name对应的list中删除指定的值
参数:
name,redis的name
value,要删除的值
num, num=0,删除列表中所有的指定值;
num=2,从前到后,删除2个; num=1,从前到后,删除左边第1个
num=-2,从后向前,删除2个
''' def lpop(name)
'''
在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素
更多:
rpop(name) 表示从右向左操作
''' def ltrim(name, start, end)
'''
在name对应的列表中移除没有在start-end索引之间的值
参数:
name,redis的name
start,索引的起始位置
end,索引结束位置
''' def lindex(name, index)
'''
在name对应的列表中根据索引获取列表元素
''' def rpoplpush(src, dst)
'''
从一个列表取出最右边的元素,同时将其添加至另一个列表的最左边
参数:
src,要取数据的列表的name
dst,要添加数据的列表的name
''' def brpoplpush(src, dst, timeout=0)
'''
从一个列表的右侧移除一个元素并将其添加到另一个列表的左侧
参数:
src,取出并要移除元素的列表对应的name
dst,要插入元素的列表对应的name
timeout,当src对应的列表中没有数据时,阻塞等待其有数据的超时时间(秒),0 表示永远阻塞
''' def blpop(keys, timeout)
'''
将多个列表排列,按照从左到右去pop对应列表的元素
参数:
keys,redis的name的集合
timeout,超时时间,当元素所有列表的元素获取完之后,阻塞等待列表内有数据的时间(秒), 0 表示永远阻塞
更多:
r.brpop(keys, timeout) 同blpop,将多个列表排列,按照从右像左去移除各个列表内的元素
''' def list_iter(name)
'''
由于redis类库中没有提供对列表元素的增量迭代,如果想要循环name对应的列表的所有元素,那么就需要:
获取name对应的所有列表
循环列表
但是,如果列表非常大,那么就有可能在第一步时就将程序的内容撑爆,所有有必要自定义一个增量迭代的功能
'''
list_count = llen(name)
for index in range(list_count):
yield lindex(name, index)

ListRedisClass

4.Set类

class SetRedisClass():
'''
Redis Set类
''' def sadd(name,values)
'''
name对应的集合中添加元素
''' def scard(name)
'''
获取name对应的集合中元素个数
''' def smembers(name)
'''
获取name对应的集合的所有成员
''' def sscan(name, cursor=0, match=None, count=None)
'''
获取集合中所有的成员--元组形式
''' def sscan_iter(name, match=None, count=None)
'''
获取集合中所有的成员--迭代器的方式
同字符串的操作,用于增量迭代分批获取元素,避免内存消耗太大
''' def sdiff(keys, *args)
'''
在第一个name对应的集合中且不在其他name对应的集合的元素集合
''' def sdiffstore(dest, keys, *args)
'''
获取第一个name对应的集合中且不在其他name对应的集合,再将其新加入到dest对应的集合中
''' def sinter(keys, *args)
'''
sinterstore(dest, keys, *args)
获取多一个name对应集合的并集,再将其加入到dest对应的集合中
''' def sunion(keys, *args)
'''
获取多个name对应的集合的并集
''' def sunionstore(dest,keys, *args)
'''
获取多一个name对应的集合的并集,并将结果保存到dest对应的集合中
''' def sismember(name, value)
'''
检查value是否是name对应的集合的成员,结果为True和False
''' def smove(src, dst, value)
'''
将某个成员从一个集合中移动到另外一个集合
''' def spop(name)
'''
从集合移除一个成员,并将其返回,说明一下,集合是无序的,所有是随机删除的
''' def srem(name, values)
'''
在name对应的集合中删除某些值
'''

SetRedisClass

5.有序集合ZSet

class ZSetRedisClass(CommRedisBase):
'''
有序集合类
''' def zadd(name, *args, **kwargs)
'''
在name对应的有序集合中添加元素
''' def zcard(name)
'''
获取name对应的有序集合元素的数量
''' def zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)
'''
按照索引范围获取name对应的有序集合的元素
参数:
name,redis的name
start,有序集合索引起始位置(非分数)
end,有序集合索引结束位置(非分数)
desc,排序规则,默认按照分数从小到大排序
withscores,是否获取元素的分数,默认只获取元素的值
score_cast_func,对分数进行数据转换的函数
''' def zrevrange(name, start, end, withscores=False, score_cast_func=float)
'''
从大到小排序(同zrange,集合是从大到小排序的)
''' def zrangebyscore(name, min, max, start=None, num=None, withscores=False, score_cast_func=float)
'''
按照分数范围获取name对应的有序集合的元素
''' def zrevrangebyscore(name, max, min, start=None, num=None, withscores=False, score_cast_func=float)
'''
按照分数范围获取有序集合的元素并排序(默认从大到小排序)
''' def zscan(name, cursor=0, match=None, count=None, score_cast_func=float)
'''
获取所有元素--默认按照分数顺序排序
''' def zscan_iter(name, match=None, count=None,score_cast_func=float)
'''
获取所有元素--迭代器
''' def zcount(name, min, max)
'''
获取name对应的有序集合中分数 在 [min,max] 之间的个数
''' def zincrby(name, value, amount)
'''
自增name对应的有序集合的 name 对应的分数
''' def zrank(name, value)
'''
获取某个值在 name对应的有序集合中的索引(从 0 开始)
更多:
zrevrank(name, value),从大到小排序
''' def zrem(name, values)
'''
删除name对应的有序集合中值是values的成员
''' def zremrangebyrank(name, min, max)
'''
根据排行范围删除
''' def zremrangebyscore(name, min, max)
'''
根据分数范围删除
''' def zscore(name, value)
'''
获取name对应有序集合中 value 对应的分数
'''

ZSetRedisClass

6.others

OtherRedisClass():
'''
其他常用操作
''' def delete(*names)
'''
根据删除redis中的任意数据类型(string、hash、list、set、有序set)
''' def exists(name)
'''
检测redis的name是否存在,存在就是True,False 不存在
''' def keys(pattern='')
'''
根据模型获取redis的name
更多:
KEYS * 匹配数据库中所有 key 。
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
KEYS hllo 匹配 hllo 和 heeeeello 等。
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo
''' def expire(name ,time)
'''
为某个redis的某个name设置超时时间
'''
lpush("list5", 11, 22)
expire("list5", time=3)
print(r.lrange("list5", 0, -1))
time.sleep(3)
print(r.lrange("list5", 0, -1)) def rename(src, dst)
'''
对redis的name重命名
''' def randomkey()
'''
随机获取一个redis的name(不删除)
''' def type(name)
'''
获取name对应值的类型
''' def scan(cursor=0, match=None, count=None)
'''
查看所有元素
''' def scan_iter(match=None, count=None)
'''
查看所有元素--迭代器
''' def get(name)
'''
查询key为name的值
''' def dbsize()
'''
当前redis包含多少条数据
''' def save()
'''
执行"检查点"操作,将数据写回磁盘。保存时阻塞
''' def flushdb()
'''
清空redis中的所有数据
'''

OtherRedisClass

[转]使用python来操作redis用法详解的更多相关文章

  1. 使用python来操作redis用法详解

    1.redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRe ...

  2. python操作redis用法详解

    python操作redis用法详解 转载地址 1.redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用 ...

  3. Python Deque 模块使用详解,python中yield的用法详解

    Deque模块是Python标准库collections中的一项. 它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除. https://blog.csdn.net/qq_3 ...

  4. C语言对文件的操作函数用法详解2

    fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const  ...

  5. C语言对文件的操作函数用法详解1

    在ANSIC中,对文件的操作分为两种方式,即: 流式文件操作 I/O文件操作 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef str ...

  6. Python API 操作Hadoop hdfs详解

    1:安装 由于是windows环境(linux其实也一样),只要有pip或者setup_install安装起来都是很方便的 >pip install hdfs 2:Client——创建集群连接 ...

  7. Python中self的用法详解,或者总是提示:TypeError: add() missing 1 required positional argument: 'self'的问题解决

    https://blog.csdn.net/songlh1234/article/details/83587086 下面总结一下self的用法详解,大家可以访问,可以针对平时踩过的坑更深入的了解下. ...

  8. python的转义字符及用法详解

    在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符. Python3.7 的官方文档中列出的所支持的转义字符,如下表: 中文版: 注:\oyy 应该是 \0yy  另外 :\e 和 \0 ...

  9. Jedis操作Redis技巧详解

    对于Redis的部署模式有两种,单机模式 和 集群模式.因此,本文的介绍也从这两个方面进行介绍.众所周知,Jedis是最著名的Redis java客户端操作类库,几乎支持所有的Redis操作.本文就是 ...

随机推荐

  1. 多文档界面QMdiArea

    当使用多文档界面功能时,我们是将QMdiArea作为主窗口的中央部件,然后在这个中央部件中,我们可以同时打开很多个子窗口QMdiSubWindow 样式: import sys from PyQt5. ...

  2. 定时器QTimer

    import sys from PyQt5.QtCore import QTimer, Qt from PyQt5.QtWidgets import QApplication, QWidget, QP ...

  3. 使用css将图像居中

    默认情况下,图像属于内联元素.这意味着它们与周围的文本一起流动.为使图像居中,我们应该将其转换成块级元素,通过将display属性的值设置为block就可以完成转换. <html> < ...

  4. c# 登录 防止sql注入 mysql数据库

    利用参数化 防止SQL注入 public string serachName(string name) { string result = ""; try { conn.Open( ...

  5. diff命令的参数详解和实例 【转】

    转自:http://blog.chinaunix.net/uid-25324849-id-270254.html diff命令参数: diff - 找出两个文件的不同点 总览 diff [选项] 源文 ...

  6. 64位Win7系统WMware安装Mac OS

    1.         准备工作 l  VMWare Workstation,我的版本是 l  MAC OS安装光盘镜像文件,种子地址 http://www.kuaipan.cn/file/id_611 ...

  7. Ex 6_19 至多用k枚硬币兑换价格_第七次作业

    子问题定义: 定义一个二维数组b,其中b[i][j]表示用i个硬币是否能兑换价格j,表示第i个币种的面值, 递归关系: 初值设定: 求解顺序: 按下标从小到大依次求解数组b每一列的值,最后二维数组b的 ...

  8. urllib处理包的简单使用

    我们可以使用urllib.request.urlopen()这个接口函数就可以打开一个网站,读取打印信息 你可以现在终端使用python from urllib import request if _ ...

  9. PYTHON-网络通信 TCP

    网络编程: 学习网络编程 为什么?目的: 服务端特点: 网络通讯(通信) 什么是网络通讯? 为什么?目的:网络建立的目的是为数据交互(通信) 如何实现通讯(通信)? 互联网协议 互联网=物理连接介质+ ...

  10. PYTHON-模块 json pickle shelve xml

    """ pickle 和 shevle 序列化后得到的数据 只有python才能解析 通常企业开发不可能做一个单机程序 都需要联网进行计算机间的交互 我们必须保证这个数据 ...