python redis模块详解
前言 现在越来越觉得知识的沉淀尤为重要,最近打算慢慢的把一些知识点做个记录,如果长期不用生疏了也可以快速回顾。下面我会依次介绍在python中常用组件redis,rabbitmq,mongodb,ES(lasticsearch),zk的用法。
这篇文章主要介绍redis的使用。
简单介绍下redis,一个高性能key-value的存储系统,支持存储的类型有string、list、set、zset和hash。在处理大规模数据读写的场景下运用比较多。
1.连接Redis数据库:
1)直接连接
import redis red = redis.Redis(host='localhost',port=6379,db=1)
2)连接池连接
连接池的原理是, 通过预先创建多个连接, 当进行redis操作时, 直接获取已经创建的连接进行操作, 而且操作完成后, 不会释放, 用于后续的其他redis操作,这样就达到了避免频繁的redis连接创建和释放的目的, 从而提高性能。redis模块采用ConnectionPool来管理对redis server的所有连接。
import redis pool = redis.ConnectionPool(host='localhost', port=6379,db=1)
red = redis.Redis(connection_pool=pool)
red.set('key1', 'value1')
red.set('key2', 'value2')
2.String类型存取:
set(self, name, value, ex=None, px=None, nx=False, xx=False)
#在Redis中设置值,默认不存在则创建,存在则修改
red.set('key', 'value')
#参数:
# set(name, value, ex=None, px=None, nx=False, xx=False)
# ex,过期时间(秒)
# px,过期时间(毫秒)
# nx,如果设置为True,则只有key不存在时,当前set操作才执行,同#setnx(key, value)
# xx,如果设置为True,则只有key存在时,当前set操作才执行 setex(self, name, value, time)
#设置过期时间(秒) psetex(self, name, time_ms, value)
#设置过期时间(豪秒)
mset(self, *args, **kwargs)
#批量设置值
red.mget({"key1":'value1', "key2":'value2'})
get(self, name)
#获取某个key的值
red.get('key1')
mget(self, keys, *args)
#批量获取
red.mget("key1","key1")
strlen(self, name)
#返回key对应值的字节长度(一个汉字3个字节)
red.strlen("key")
append(name, value)
#在name对应的值后面追加内容
red.set("key","value")
print(r.get("key")) #输出:'value'
r.append("key","one")
print(r.get("key")) #输出:'valueone'
3.Hash类型:一个name对应一个dic字典来存储。
hset(self, name, key, value)
#name对应的hash中设置一个键值对(不存在,则创建,否则,修改)
red.hset("name","key","value")
hget(self, name, key)
red.hset("name","key","value")
#在name对应的hash中根据key获取value
print(red.hget("name","key"))#输出:'value'
hgetall(self, name)
#获取name所有键值对
red.hgetall("name")
hmset(self, name, mapping)
#在name对应的hash中批量设置键值对,mapping:字典
dic={"key":"aa","key2":"bb"}
red.hmset("name",dic)
print(red.hget("name","key2"))#输出:bb
hmget(self, name, keys, *args)
#在name对应的hash中批量获取键所对应的值
dic={"key1":"aa","key2":"bb"}
red.hmset("name",dic)
print(red.hmget("name","key1","key2"))#输出:['aa', 'bb']
hlen(self, name)
#获取hash键值对的个数
print(red.hlen("name"))#输出:2
hkeys(self, name)
#获取hash中所有key
red.hkeys("name")
hvals(self, name)
#获取hash中所有value
red.hvals("name")
hexists(self, name, key)
#检查name对应的hash是否存在当前传入的key
print(red.hexists("name","key1"))#输出:Ture
hdel(self, name, *keys)
#删除指定name对应的key所在的键值对,删除成功返回1,失败返回0
print(red.hdel("name","key1"))#输出:1
hincrby(self, name, key, amount=1)
#与hash中key对应的值相加,不存在则创建key=amount(amount为整数)
print(red.hincrby("name","key",amount=10))#返回:10
4.list类型:一个name对应一个列表存储。
lpush(self, name, *values)
#元素从list的左边添加,可以添加多个
red.lpush('name','元素1','元素2')
rpush(self, name, *values)
#元素从list右边添加,可以添加多个
red.rpush('name','元素1','元素2')
lpushx(self, name, *values)
#当name存在时,元素才能从list的左边加入
red.lpushx('name','元素1')
rpushx(self, name, *values)
#当name存在时,元素才能从list的右边加入
red.rpushx('name','元素1')
llen(self, name)
#name列表长度
red.llen('name')
linsert(self, name, where, refvalue, value)
# 在name对应的列表的某一个值前或后插入一个新值
red.linsert("name","BEFORE","元素2","元素1.5")#在列表内找到第一个"元素2",在它前面插入"元素1.5" #参数:
# name: redis的name
# where: BEFORE(前)或AFTER(后)
# refvalue: 列表内的值
# value: 要插入的数据
lset(self, name, index, value)
#对list中的某一个索引位置重新赋值
red.lset("name",0,"abc")
lrem(self, name, value, num=0)
#删除name对应的list中的指定值
red.lrem("name","元素1",num=0) # 参数:
# name: redis的name
# value: 要删除的值
# num: num=0 删除列表中所有的指定值;
# num=2 从前到后,删除2个;
# num=-2 从后向前,删除2个'''
lpop(self, name)
#移除列表的左侧第一个元素,返回值则是第一个元素
print(red.lpop("name"))
lindex(self, name, index)
#根据索引获取列表内元素
print(red.lindex("name",1))
lrange(self, name, start, end)
#分片获取元素
print(red.lrange("name",0,-1))
ltrim(self, name, start, end)
#移除列表内没有在该索引之内的值
red.ltrim("name",0,2)
5.set类型:集合是不允许重复的列表
sadd(self, name, *values)
#给name对应的集合中添加元素
red.sadd("name","aa")
red.sadd("name","aa","bb")
scard(self, name)
#获取name对应的集合中的元素个数
red.scard("name")
smembers(self, name)
#获取name对应的集合的所有成员
red.smembers('name')
sdiff(self, keys, *args)
#在第一个name对应的集合中且不在其他name对应的集合的元素集合
red.sadd("name","aa","bb")
red.sadd("name1","bb","cc")
red.sadd("name2","bb","cc","dd") print(red.sdiff("name","name1","name2"))#输出:{aa}
sismember(self, name, value)
#检查value是否是name对应的集合内的元素
smove(self, src, dst, value)
#将某个元素从一个集合中移动到另外一个集合
spop(self, name)
#从集合的右侧移除一个元素,并将其返回
6.其他常用操作
flushdb(self,asynchronous=False)
#清空当前db中的数据,默认是同步。若开启异步asynchronous=True,会新起一个线程进行清空操作,不阻塞主线程
flushall(self,asynchronous=False)
#清空所有db中的数据,默认是同步。异步同flushdb
delete(self, *names)
#根据name删除redis中的任意数据类型
exists(self, name)
#检查redis的name是否存在
keys(self, pattern='*')
#根据* ?等通配符匹配获取redis的name
expire(self,name ,time)
#为某个name的设置过期时间
rename(self, src, dst)
#重命名
move(self, name, db))
# 将redis的某个name移动到指定的db下
randomkey(self)
#随机获取一个redis的name(不删除)
type(self, name)
# 获取name对应值的类型
python redis模块详解的更多相关文章
- python time模块详解
python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明 一.简介 ...
- python docopt模块详解
python docopt模块详解 docopt 本质上是在 Python 中引入了一种针对命令行参数的形式语言,在代码的最开头使用 """ ""&q ...
- (转)python collections模块详解
python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...
- python pathlib模块详解
python pathlib模块详解
- Python Fabric模块详解
Python Fabric模块详解 什么是Fabric? 简单介绍一下: Fabric是一个Python的库和命令行工具,用来提高基于SSH的应用部署和系统管理效率. 再具体点介绍一下,Fabri ...
- python time 模块详解
Python中time模块详解 发表于2011年5月5日 12:58 a.m. 位于分类我爱Python 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括: ...
- python常用模块详解
python常用模块详解 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用p ...
- python os模块详解
一.Python os模块(Linux环境) 1.1 执行shell命令 os.system('cmd') 执行命令不保存结果 os.popen('command') 执行后返回结果,使用.read( ...
- Python ZipFile模块详解(转)
Python zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个cl ...
随机推荐
- 杨其菊201771010134《面向对象程序设计(java)》第六周学习总结
<面向对象程序设计(java)>第六周学习总结 第一部分:理论知识 1)类.超类和子类2)Object:所有类的超类 3)泛型数组列表4)对象包装器和自动打包 5)参数数量可变的方法 6) ...
- 九校联考_24OI——餐馆restaurant
凉心模拟D1T1--最简单的一道题 TAT 餐馆(restaurant) 题目背景 铜企鹅是企鹅餐馆的老板,他正在计划如何使得自己本年度收益增加. 题目描述 共有n 种食材,一份食材i 需要花ti 小 ...
- Log4j 日志组件
官网:https://logging.apache.org/log4j/2.x/ 使用 Log4j 的步骤: 第一步 引入 Log4j 的 jar 包 1. 直接下载 log4j-x.x.x.jar ...
- Python 语法提示vim配置
1. pydiction 2. 默认 Vim 7.xx以上版本 python_pydiction.vim -- Vim plugin that autocompletes Python code. c ...
- vue中鼠标移入字体下面显示颜色并改变字体颜色的问题
<template> <div class="smart_nav" :class="{'fixedTop':fixedTop}"> &l ...
- 返回头部js
$('.backTop, .backCss').click(function() { var id=$(this).attr('class'); $('html, body').animate({sc ...
- 《Linux就该这么学》第四天课程
秦时明月经典语录: 侠道:五步之内,百人不当.十年磨剑,一孤侠道——荆轲 我发了一些课堂笔记,供你们参考 原创地址:https://www.linuxprobe.com/chapter-03.htm ...
- 第41章:MongoDB-集群--Sharding(分片)
①Sharding分片概念 分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程.将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载. 分片是每个分 ...
- Vue-Cli 搭建项目 小白
vue-用Vue-cli从零开始搭建一个Vue项目 Vue是近两年来比较火的一个前端框架(渐进式框架吧). Vue两大核心思想:组件化和数据驱动.组件化就是将一个整体合理拆分为一个一个小块(组件),组 ...
- python库函数Map, Filter and Reduce的用法
python中有三个函数式编程极大的简化了程序的复杂性,这里就做一下讨论和记录. 一 Map:应用在链表输入所有元素的函数,它的格式如下所示: map(function_to_apply, list_ ...