python操作redis方法总结


Posted in Python onJune 06, 2018

连接 Redis

import redisc

连接方式:redis提供了2个方法

1:StrictRedis:实现大部分官方的命令

2:Redis:是StrictRedis的子类,用于向后兼容旧版的redis。

官方推荐使用StrictRedis方法。

举例(普通连接):

import redis

#decode_responses=True 自动解码

r = redis.Redis(host='127.0.0.1',port=6379,password='123456',db=0,decode_responses=True) #默认数据库为0

r = redis.StrictRedis(host='10.10.2.14',port=6379,password='123456',decode_responses=True)

连接池:connection pool

管理对一个redis server的所有连接,避免每次建立,释放连接的开销。默认,每个redis实例都会维护一个自己的连接池,可以直接建立一个连接池,作为参数传给redis,这样可以实现多个redis实例共享一个连接池。

举例(连接池):

pool = redis.ConnectionPool(host='127.0.0.1',port=6379,password='123456',decode_responses=True)
r = redis.Redis(connection_pool=pool)

一 STRING 字符串的操作

1. r.set 设置值

#在Redis中设置值,默认不存在则创建,存在则修改
r.set('name', 'zhangsan')
'''参数:
  set(name, value, ex=None, px=None, nx=False, xx=False)
  ex,过期时间(秒)
  px,过期时间(毫秒)
  nx,如果设置为True,则只有name不存在时,当前set操作才执行,同setnx(name, value)
  xx,如果设置为True,则只有name存在时,当前set操作才执行'''
r.get('name')

3. mset 批量设置值

#批量设置值
r.mset(name1='zhangsan', name2='lisi')
#或
r.mget({"name1":'zhangsan', "name2":'lisi'})

4. mget(keys, *args) 批量获取

#批量获取
print(r.mget("name1","name2"))
#或
li=["name1","name2"]
print(r.mget(li))

5. getset 设置新值,打印原值

#设置新值,打印原值
getset(name, value) 

print(r.getset("name1","wangwu")) #输出:zhangsan
print(r.get("name1")) #输出:wangwu

6. getrange 根据字节获取子序列

#根据字节获取子序列
getrange(key, start, end) 

r.set("name","zhangsan")
print(r.getrange("name",0,3))#输出:zhan

7. setrange 修改字符串内容,从指定字符串索引开始向后替换,如果新值太长时,则向后添加

#修改字符串内容,从指定字符串索引开始向后替换,如果新值太长时,则向后添加
setrange(name, offset, value) 

r.set("name","zhangsan")
r.setrange("name",1,"z")
print(r.get("name")) #输出:zzangsan
r.setrange("name",6,"zzzzzzz")
print(r.get("name")) #输出:zzangszzzzzzz

8. strlen(name) 返回name对应值的字节长度

#返回name对应值的字节长度(一个汉字3个字节)
r.set("name","zhangsan")
print(r.strlen("name")) #输出:8

9. incr 值的累加 amount为累加的值

#自增mount对应的值,当mount不存在时,则创建mount=amount,否则,则自增,amount为自增数(整数)
incr(self, name, amount=1) 

print(r.incr("mount",amount=2))#输出:2
print(r.incr("mount"))#输出:3
print(r.incr("mount",amount=3))#输出:6
print(r.incr("mount",amount=6))#输出:12
print(r.get("mount")) #输出:12

10. append 在name对应的值后面追加内容

#在name对应的值后面追加内容
append(name, value)

r.set("name","zhangsan")
print(r.get("name"))  #输出:'zhangsan
r.append("name","lisi")
print(r.get("name"))  #输出:zhangsanlisi

11.type 查看类型

r.type(name)

二 Hash 操作

redis中的Hash 在内存中类似于一个name对应一个dic来存储

1. hset name对应的hash中设置一个键值对(不存在,则创建,否则,修改)

#name对应的hash中设置一个键值对(不存在,则创建,否则,修改)
hset(name, key, value)
r.hset("dic_name","a1","aa")

2. hget 在name对应的hash中根据key获取value

r.hset("dic_name","a1","aa")
#在name对应的hash中根据key获取value
hget(name,key) 

print(r.hget("dic_name","a1"))#输出:aa

3. hgetall 获取name对应hash的所有键值

#获取name对应hash的所有键值
hgetall(name)

print(r.hgetall("dic_name"))

4. hmset 在name对应的hash中批量设置键值对,mapping:字典

#在name对应的hash中批量设置键值对,mapping:字典
hmset(name, mapping) 

dic={"a1":"aa","b1":"bb"}
r.hmset("dic_name",dic)
print(r.hget("dic_name","b1"))#输出:bb

5. hmget 在name对应的hash中获取多个key的值

# 在name对应的hash中获取多个key的值
hmget(name, keys, *args) 

li=["a1","b1"]
print(r.hmget("dic_name",li))
print(r.hmget("dic_name","a1","b1"))

6.

hlen 获取hash中键值对的个数

hkeys 获取hash中所有的key的值

hvals 获取hash中所有的value的值

dic={"a1":"aa","b1":"bb"}
r.hmset("dic_name",dic)

#hlen(name) 获取hash中键值对的个数
print(r.hlen("dic_name"))

#hkeys(name) 获取hash中所有的key的值
print(r.hkeys("dic_name"))

#hvals(name) 获取hash中所有的value的值
print(r.hvals("dic_name"))

7. hexists 检查name对应的hash是否存在当前传入的key

#检查name对应的hash是否存在当前传入的key
hexists(name, key)

print(r.hexists("dic_name","a1"))#输出:True

8. hdel 删除指定name对应的key所在的键值对

#删除指定name对应的key所在的键值对
hdel(name,*keys)  

r.hdel("dic_name","a1")

9. hincrby 自增hash中key对应的值,不存在则创建key=amount(amount为整数)

#自增hash中key对应的值,不存在则创建key=amount(amount为整数)
hincrby(name, key, amount=1)

print(r.hincrby("demo","a",amount=2))

10.hincrbyfloat 自增hash中key对应的值,不存在则创建key=amount(amount为浮点数)

自增hash中key对应的值,不存在则创建key=amount(amount为浮点数)

hincrbyfloat(name, key, amount=1.0)

三 List 操作

redis中的List在内存中按照一个name对应一个List来存储

1. lpush 在name对应的list中添加元素,每个新的元素都添加到列表的最左边

# 在name对应的list中添加元素,每个新的元素都添加到列表的最左边
lpush(name,values)

r.lpush("list_name",2)
r.lpush("list_name",3,4,5)#保存在列表中的顺序为5,4,3,2

2.rpush 同lpush,但每个新的元素都添加到列表的最右边

#同lpush,但每个新的元素都添加到列表的最右边
rpush(name,values)

3. lpushx 在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边

#在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边
 lpushx(name,value)

4. rpushx 在name对应的list中添加元素,只有name已经存在时,值添加到列表的最右边

#在name对应的list中添加元素,只有name已经存在时,值添加到列表的最右边
 rpushx(name,value)

5. llen name对应的list元素的个数

# name对应的list元素的个数
llen(name)

print(r.llen("list_name"))

6. linsert 在name对应的列表的某一个值前或后插入一个新值

# 在name对应的列表的某一个值前或后插入一个新值
 linsert(name, where, refvalue, value))
r.linsert("list_name","BEFORE","2","SS")#在列表内找到第一个元素2,在它前面插入SS

'''参数:
   name: redis的name
   where: BEFORE(前)或AFTER(后)
   refvalue: 列表内的值
   value: 要插入的数据'''

7. r.lset 对list中的某一个索引位置重新赋值

#对list中的某一个索引位置重新赋值
r.lset(name, index, varlue)

r.lset("list_name",0,"bbb")

8. r.lrem 删除name对应的list中的指定值

#删除name对应的list中的指定值
r.lrem(name, count, value) 
r.lrem("list_name",3,'ssss')

''' 参数:
  name: redis的name
  value: 要删除的值
  num:  num=0 删除列表中所有的指定值;
      num=2 从前到后,删除2个;
      num=-2 从后向前,删除2个'''

9. lpop 移除列表的左侧第一个元素,返回值则是第一个元素

#移除列表的左侧第一个元素,返回值则是第一个元素
lpop(name) 

print(r.lpop("list_name"))

10. lindex 根据索引获取列表内元素

#根据索引获取列表内元素
lindex(name, index)

print(r.lindex("list_name",1))

11. lrange 分片获取元素

#分片获取元素
lrange(name, start, end)

print(r.lrange("list_name",0,-1))

12. ltrim 移除列表内没有在该索引之内的值(裁剪)

#移除列表内没有在该索引之内的值
ltrim(name, start, end)

r.ltrim("list_name",0,2)

13. rpoplpush(src, dst) 从一个列表取出最右边的元素,同时将其添加至另一个列表的最左边

# 从一个列表取出最右边的元素,同时将其添加至另一个列表的最左边
#src 要取数据的列表
#dst 要添加数据的列表

四 Set 操作

Set集合就是不允许重复的列表

1. sadd(name,values) 给name对应的集合中添加元素

#给name对应的集合中添加元素
r.sadd("set_name","aa")
r.sadd("set_name","aa","bb")

2. smembers(name) 获取name对应的集合的所有成员

#获取name对应的集合的所有成员

3. scard(name) 获取name对应的集合中的元素个数

#获取name对应的集合中的元素个数
r.scard("set_name")

4. sdiff(keys, *args) 在第一个name对应的集合中且不在其他name对应的集合的元素集合

#在第一个name对应的集合中且不在其他name对应的集合的元素集合
r.sadd("set_name","aa","bb")
r.sadd("set_name1","bb","cc")
r.sadd("set_name2","bb","cc","dd")

print(r.sdiff("set_name","set_name1","set_name2"))#输出:{aa}

6. sinter(keys, *args) 获取多个name对应集合的并集

# 获取多个name对应集合的并集
r.sadd("set_name","aa","bb")
r.sadd("set_name1","bb","cc")
r.sadd("set_name2","bb","cc","dd")

print(r.sinter("set_name","set_name1","set_name2"))#输出:{bb}

8.sismember 检查value是否是name对应的集合内的元素

#检查value是否是name对应的集合内的元素
sismember(name, value)

9. smove(src, dst, value) 将某个元素从一个集合中移动到另外一个集合

#将某个元素从一个集合中移动到另外一个集合

10. spop(name) 从集合的右侧移除一个元素,并将其返回

#从集合的右侧移除一个元素,并将其返回

11. srandmember(name, numbers) 从name对应的集合中随机获取numbers个元素

# 从name对应的集合中随机获取numbers个元素
print(r.srandmember("set_name2",2))

12. srem(name, values) 删除name对应的集合中的某些值

#删除name对应的集合中的某些值
print(r.srem("set_name2","bb","dd"))

13. sunion(keys, *args) 获取多个name对应的集合的并集

#获取多个name对应的集合的并集
r.sunion("set_name","set_name1","set_name2")

14. sunionstore(dest,keys, *args) 获取多个name对应的集合的并集,并将结果保存到dest对应的集合中

#获取多个name对应的集合的并集,并将结果保存到dest对应的集合中

五 有序集合 zset

有序集合:

在集合的基础上,为每元素排序,元素的排序需要根据另外一个值来进行比较,所以,对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序。

1. zadd(name, args, *kwargs)

# 在name对应的有序集合中添加元素
r.zadd("zset_name", 6,"a1", 2, "a2", 5,"a3")
#或
r.zadd('zset_name1', b1=10, b2=5)

2. zcard(name) 获取有序集合内元素的数量

#获取有序集合内元素的数量

3. zcount(name, min, max) 获取有序集合中分数在[min,max]之间的个数

#获取有序集合中分数在[min,max]之间的个数
print(r.zcount("zset_name",1,5))

4. zincrby(name, value, amount) 自增有序集合内value对应的分数

#自增有序集合内value对应的分数
r.zincrby("zset_name","a1",amount=2)#自增zset_name对应的有序集合里a1对应的分数

5. zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)

# 按照索引范围获取name对应的有序集合的元素
aa=r.zrange("zset_name",0,1,desc=False,withscores=True,score_cast_func=int)
print(aa)
'''参数:
  name  redis的name
  start  有序集合索引起始位置
  end   有序集合索引结束位置
  desc  排序规则,默认按照分数从小到大排序
  withscores 是否获取元素的分数,默认只获取元素的值
  score_cast_func 对分数进行数据转换的函数'''

6. zrevrange(name, start, end, withscores=False, score_cast_func=float)

#同zrange,集合是从大到小排序的

7. zrank(name, value)、zrevrank(name, value)

#获取value值在name对应的有序集合中的排行位置(从0开始)
print(r.zrank("zset_name", "a2"))

print(r.zrevrank("zset_name", "a2"))#从大到小排序

 

8. zscore(name, value) 获取name对应有序集合中 value 对应的分数

#获取name对应有序集合中 value 对应的分数
print(r.zscore("zset_name","a1"))

 

9. zrem(name, values) 删除name对应的有序集合中值是values的成员

#删除name对应的有序集合中值是values的成员
r.zrem("zset_name","a1","a2")

10. zremrangebyrank(name, min, max) 根据排行范围删除

#根据排行范围删除

11. zremrangebyscore(name, min, max) 根据分数范围删除

#根据分数范围删除

12. zinterstore(dest, keys, aggregate=None)

r.zadd("zset_name", "a1", 6, "a2", 2,"a3",5)
r.zadd('zset_name1', a1=7,b1=10, b2=5)

# 获取两个有序集合的交集并放入dest集合,如果遇到相同值不同分数,则按照aggregate进行操作
# aggregate的值为: SUM MIN MAX
r.zinterstore("zset_name2",("zset_name1","zset_name"),aggregate="MAX")
print(r.zscan("zset_name2"))

13. zunionstore(dest, keys, aggregate=None)

#获取两个有序集合的并集并放入dest集合,其他同zinterstore,

其他常用操作

1. delete(*names) 根据name删除redis中的任意数据类型

#根据name删除redis中的任意数据类型

2. exists(name) 检测redis的name是否存在

#检测redis的name是否存在

3. keys(pattern='*') 根据* ?等通配符匹配获取redis的name

#根据* ?等通配符匹配获取redis的name

4. expire(name ,time) 为某个name设置超时时间

# 为某个name设置超时时间

5. rename(src, dst) 重命名

# 重命名

6. move(name, db)) 将redis的某个值移动到指定的db下

# 将redis的某个值移动到指定的db下

7. randomkey() 随机获取一个redis的name(不删除)

#随机获取一个redis的name(不删除)

8. type(name) 获取name对应值的类型

# 获取name对应值的类型

Python 相关文章推荐
python3实现读取chrome浏览器cookie
Jun 19 Python
Python脚本实现12306火车票查询系统
Sep 30 Python
Python编程求解二叉树中和为某一值的路径代码示例
Jan 04 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
Mar 31 Python
python线程池threadpool使用篇
Apr 27 Python
python实现求特征选择的信息增益
Dec 18 Python
python批量创建指定名称的文件夹
Mar 21 Python
django rest framework 实现用户登录认证详解
Jul 29 Python
python实现连续变量最优分箱详解--CART算法
Nov 22 Python
python怎么判断素数
Jul 01 Python
pytorch 如何使用float64训练
May 24 Python
python多次执行绘制条形图
Apr 20 Python
目前最全的python的就业方向
Jun 05 #Python
python多进程提取处理大量文本的关键词方法
Jun 05 #Python
使用python进行文本预处理和提取特征的实例
Jun 05 #Python
python 用正则表达式筛选文本信息的实例
Jun 05 #Python
python和shell获取文本内容的方法
Jun 05 #Python
python 查找文件名包含指定字符串的方法
Jun 05 #Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 #Python
You might like
php之对抗Web扫描器的脚本技巧
2008/10/01 PHP
PHP中PDO的错误处理
2011/09/04 PHP
第五章 php数组操作
2011/12/30 PHP
初识Laravel
2014/10/30 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
表单项的name命名为submit、reset引起的问题
2007/12/22 Javascript
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
解读ES6中class关键字
2017/11/20 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
python学生管理系统代码实现
2020/04/05 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
python爬虫之遍历单个域名
2019/11/20 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
社会保险接收函
2014/01/12 职场文书
优秀志愿者事迹材料
2014/02/03 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
志愿者事迹材料
2014/12/26 职场文书
逃课检讨书怎么写
2015/01/01 职场文书
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js