前言  现在越来越觉得知识的沉淀尤为重要,最近打算慢慢的把一些知识点做个记录,如果长期不用生疏了也可以快速回顾。下面我会依次介绍在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模块详解的更多相关文章

  1. python time模块详解

    python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明  一.简介 ...

  2. python docopt模块详解

    python docopt模块详解 docopt 本质上是在 Python 中引入了一种针对命令行参数的形式语言,在代码的最开头使用 """ ""&q ...

  3. (转)python collections模块详解

    python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...

  4. python pathlib模块详解

    python pathlib模块详解    

  5. Python Fabric模块详解

    Python Fabric模块详解 什么是Fabric? 简单介绍一下: ​ Fabric是一个Python的库和命令行工具,用来提高基于SSH的应用部署和系统管理效率. 再具体点介绍一下,Fabri ...

  6. python time 模块详解

    Python中time模块详解 发表于2011年5月5日 12:58 a.m.    位于分类我爱Python 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括: ...

  7. python常用模块详解

    python常用模块详解 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用p ...

  8. python os模块详解

    一.Python os模块(Linux环境) 1.1 执行shell命令 os.system('cmd') 执行命令不保存结果 os.popen('command') 执行后返回结果,使用.read( ...

  9. Python ZipFile模块详解(转)

    Python zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个cl ...

随机推荐

  1. Could not transfer artifact org.springframework

    无法从中心仓库获取该版本的信息, 从新下载: 1.配置eclipse中的maven  user setting路径为本地maven安装路径 配置阿里云镜像路径 <mirror> <i ...

  2. 网页打印样式CSS

    相信大多数的前端工程师都是处理显示屏上面的设计,用到最多的计量单位就是px,但是有些时候,我们难免也会有打印的需求,比如一个电商平台的“物流配送打印单”,“打印订单”等等可能都是需要从网友上打印出来的 ...

  3. Chrome浏览器用AdBlockPlus拦截百度广告

    一:安装AdBlockPlus插件,这个貌似要FQ安装,不知道可不可以本地安装: 二:在右侧的扩展那里找到ABP扩展,然后设置-高级-我的过滤列表栏-开始创建我的过滤列表: 三:在列表栏里添加 bai ...

  4. easy ui Uncaught Error: cannot call methods on tooltip prior to initialization; attempted to call method 'hide'

    今天bootstrap 和easy ui混用时候报了这么一个错误,本来可以点击编辑的,但是现在一点击就报错,

  5. 1.1初识python

    1.目前大量的公司都在使用python,功能强大很是牛逼! 2.运维要懂开发,做个全栈的工程师贼牛逼 3.python是一个解释型语言,编译型和解释型的区别是: ①编译型语言由编译器(Compiler ...

  6. 关于esp32的省电模式的WiFi连接

    对于ESP32,其作为一款集成了2.4GHz WiFi和蓝牙双模块的单芯片,所有基于wifi和蓝牙开发是学习esp32的重要一环,今天WiFi原理和网络结构 可以点击链接进行详细的了解,这里就不做详细 ...

  7. Mac通过type-c接口无法识别移动硬盘

      最近买了一块移动硬盘以及硬盘盒连接到Mac上来使用,最近发现了一个问题,就是当我使用完后将硬盘推出第二天再次连接上的时候硬盘不能被识别了,连硬盘和上的数据指示灯也不会亮,但是连接的鼠标键盘却没问题 ...

  8. JS中多维数组的深拷贝的多种实现方式

    因为javascript分原始类型与引用类型(与java.c#类似).Array是引用类型,所以直接用=号赋值的话,只是把源数组的地址(或叫指针)赋值给目的数组,并没有实现数组的数据的拷贝.另外对一维 ...

  9. 「SDOI2016」储能表(数位dp)

    「SDOI2016」储能表(数位dp) 神仙数位 \(dp\) 系列 可能我做题做得少 \(QAQ\) \(f[i][0/1][0/1][0/1]\) 表示第 \(i\) 位 \(n\) 是否到达上界 ...

  10. css插入背景图片底部有白边的解决方法

    相信很多小伙伴遇到过用CSS插入背景图时,底部出现白边的情况,如下图:   个人总结了2个方法如下: 解决方法1:给图片都加上 vertical-align: middle属性.有时,移动端也会有类似 ...