前言  现在越来越觉得知识的沉淀尤为重要,最近打算慢慢的把一些知识点做个记录,如果长期不用生疏了也可以快速回顾。下面我会依次介绍在python中常用组件redis,rabbitmq,mongodb,ES(lasticsearch),zk的用法。

这篇文章主要介绍redis的使用。

简单介绍下redis,一个高性能key-value的存储系统,支持存储的类型有string、list、set、zset和hash。在处理大规模数据读写的场景下运用比较多。

1.连接Redis数据库:

1)直接连接

  1. import redis
  2.  
  3. red = redis.Redis(host='localhost',port=6379,db=1)

2)连接池连接

连接池的原理是, 通过预先创建多个连接, 当进行redis操作时, 直接获取已经创建的连接进行操作, 而且操作完成后, 不会释放, 用于后续的其他redis操作,这样就达到了避免频繁的redis连接创建和释放的目的, 从而提高性能。redis模块采用ConnectionPool来管理对redis server的所有连接。

  1. import redis
  2.  
  3. pool = redis.ConnectionPool(host='localhost', port=6379,db=1)
  4. red = redis.Redis(connection_pool=pool)
  5. red.set('key1', 'value1')
  6. red.set('key2', 'value2')

2.String类型存取:

set(self, name, value, ex=None, px=None, nx=False, xx=False)

  1. #在Redis中设置值,默认不存在则创建,存在则修改
  2. red.set('key', 'value')
  3. #参数:
  4. # set(name, value, ex=None, px=None, nx=False, xx=False)
  5. # ex,过期时间(秒)
  6. # px,过期时间(毫秒)
  7. # nx,如果设置为True,则只有key不存在时,当前set操作才执行,同#setnx(key, value)
  8. # xx,如果设置为True,则只有key存在时,当前set操作才执行
  9.  
  10. setex(self, name, value, time)
  11. #设置过期时间(秒)
  12.  
  13. psetex(self, name, time_ms, value)
  14. #设置过期时间(豪秒)

mset(self, *args, **kwargs)

  1. #批量设置值
  2. red.mget({"key1":'value1', "key2":'value2'})

get(self, name)

  1. #获取某个key的值
  2. red.get('key1')

mget(self, keys, *args)

  1. #批量获取
  2. red.mget("key1","key1")

strlen(self, name)

  1. #返回key对应值的字节长度(一个汉字3个字节)
  2. red.strlen("key")

append(name, value)

  1. #在name对应的值后面追加内容
  2. red.set("key","value")
  3. print(r.get("key")) #输出:'value'
  4. r.append("key","one")
  5. print(r.get("key")) #输出:'valueone'

3.Hash类型:一个name对应一个dic字典来存储。

hset(self, name, key, value)

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

hget(self, name, key)

  1. red.hset("name","key","value")
  2. #在name对应的hash中根据key获取value
  3. print(red.hget("name","key"))#输出:'value'

hgetall(self, name)

  1. #获取name所有键值对
  2. red.hgetall("name")

hmset(self, name, mapping)

  1. #在name对应的hash中批量设置键值对,mapping:字典
  2. dic={"key":"aa","key2":"bb"}
  3. red.hmset("name",dic)
  4. print(red.hget("name","key2"))#输出:bb

hmget(self, name, keys, *args)

  1. #在name对应的hash中批量获取键所对应的值
  2. dic={"key1":"aa","key2":"bb"}
  3. red.hmset("name",dic)
  4. print(red.hmget("name","key1","key2"))#输出:['aa', 'bb']

hlen(self, name)

  1. #获取hash键值对的个数
  2. print(red.hlen("name"))#输出:2

hkeys(self, name)

  1. #获取hash中所有key
  2. red.hkeys("name")

hvals(self, name)

  1. #获取hash中所有value
  2. red.hvals("name")

hexists(self, name, key)

  1. #检查name对应的hash是否存在当前传入的key
  2. print(red.hexists("name","key1"))#输出:Ture

hdel(self, name, *keys)

  1. #删除指定name对应的key所在的键值对,删除成功返回1,失败返回0
  2. print(red.hdel("name","key1"))#输出:1

hincrby(self, name, key, amount=1)

  1. #与hash中key对应的值相加,不存在则创建key=amount(amount为整数)
  2. print(red.hincrby("name","key",amount=10))#返回:10

4.list类型:一个name对应一个列表存储。

lpush(self, name, *values)

  1. #元素从list的左边添加,可以添加多个
  2. red.lpush('name','元素1','元素2')

rpush(self, name, *values)

  1. #元素从list右边添加,可以添加多个
  2. red.rpush('name','元素1','元素2')

lpushx(self, name, *values)

  1. #当name存在时,元素才能从list的左边加入
  2. red.lpushx('name','元素1')

rpushx(self, name, *values)

  1. #当name存在时,元素才能从list的右边加入
  2. red.rpushx('name','元素1')

llen(self, name)

  1. #name列表长度
  2. red.llen('name')

linsert(self, name, where, refvalue, value)

  1. # 在name对应的列表的某一个值前或后插入一个新值
  2. red.linsert("name","BEFORE","元素2","元素1.5")#在列表内找到第一个"元素2",在它前面插入"元素1.5"
  3.  
  4. #参数:
  5. # name: redis的name
  6. # where: BEFORE(前)或AFTER(后)
  7. # refvalue: 列表内的值
  8. # value: 要插入的数据

lset(self, name, index, value)

  1. #对list中的某一个索引位置重新赋值
  2. red.lset("name",0,"abc")

lrem(self, name, value, num=0)

  1. #删除name对应的list中的指定值
  2. red.lrem("name","元素1",num=0)
  3.  
  4. # 参数:
  5. # name: redis的name
  6. # value: 要删除的值
  7. # num: num=0 删除列表中所有的指定值;
  8. # num=2 从前到后,删除2个;
  9. # num=-2 从后向前,删除2个'''

lpop(self, name)

  1. #移除列表的左侧第一个元素,返回值则是第一个元素
  2. print(red.lpop("name"))

lindex(self, name, index)

  1. #根据索引获取列表内元素
  2. print(red.lindex("name",1))

lrange(self, name, start, end)

  1. #分片获取元素
  2. print(red.lrange("name",0,-1))

ltrim(self, name, start, end)

  1. #移除列表内没有在该索引之内的值
  2. red.ltrim("name",0,2)

5.set类型:集合是不允许重复的列表

sadd(self, name, *values)

  1. #给name对应的集合中添加元素
  2. red.sadd("name","aa")
  3. red.sadd("name","aa","bb")

scard(self, name)

  1. #获取name对应的集合中的元素个数
  2. red.scard("name")

smembers(self, name)

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

sdiff(self, keys, *args)

  1. #在第一个name对应的集合中且不在其他name对应的集合的元素集合
  2. red.sadd("name","aa","bb")
  3. red.sadd("name1","bb","cc")
  4. red.sadd("name2","bb","cc","dd")
  5.  
  6. print(red.sdiff("name","name1","name2"))#输出:{aa

sismember(self, name, value)

  1. #检查value是否是name对应的集合内的元素

smove(self, src, dst, value)

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

spop(self, name)

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

6.其他常用操作

flushdb(self,asynchronous=False)

  1. #清空当前db中的数据,默认是同步。若开启异步asynchronous=True,会新起一个线程进行清空操作,不阻塞主线程

flushall(self,asynchronous=False)

  1. #清空所有db中的数据,默认是同步。异步同flushdb

delete(self, *names)

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

exists(self, name)

  1. #检查redis的name是否存在

keys(self, pattern='*')

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

expire(self,name ,time)

  1. #为某个name的设置过期时间

rename(self, src, dst)

  1. #重命名

move(self, name, db))

  1. # 将redis的某个name移动到指定的db下

randomkey(self)

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

type(self, name)

  1. # 获取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. django by example 第四章 dashboard处html无法渲染问题

    描述: 实现django by example 代码时,第四章 dashboard处html无法渲染问题. 此时报错,NoReverseMatch at /account/login/, Error ...

  2. MySQL5.7 Group Replication (MGR)--Mysql的组复制之多主模式

    MGR——Mysql的组复制之多主模式 以下测试在VMware环境: 操作系统:Centos 6.9 X86_64 数据库:Mysql 5.7 (mysql  Ver 14.14 Distrib 5. ...

  3. JS判断是否有js、css文件的引入方法

    在页面头部有个 <script type="text/javascript" src="abc.js"></script> <li ...

  4. ActiveMQ_3Java实现

    Java实现 添加相应的jar包 <dependency> <groupId>org.apache.activemq</groupId> <artifactI ...

  5. s5-6 Linux 标准输出 系统优化 目录结构

    标准输出 重定向符号 #>   1>    标准输出重定向  先把文件的内容清空   把内容放在文件的最后一行 #>>  1>>   追加重定向      把内容放 ...

  6. 获取sql 时间时分秒

    select DATE_FORMAT(now(),'%Y-%m-%d %T') from dual;  年月日时分秒 select DATE_FORMAT(now(),'%T') from dual; ...

  7. zabbix items

    zabbixversion:3.2.8 在添加zabbix items的时候,注意store value的设置非常实用,有三种选择: As is:d对接受到的结果不做任何处理 Delta(speed ...

  8. web服务器原理(作业四)

      Web服务器简介:Web服务器是指驻留于因特网上某种类型计算机的程序.当web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求并将文件发送到该浏览器上,附带的信息会告诉浏览器如何查看该 ...

  9. mybatis分页查询,SqlServer 2008 查询速度很慢

    一个业务场景,需要进行union查询: 查询速度非常慢,大概要37秒: 直接复制sql在数据库客户端执行,速度很快,由此可知是mybatis的原因,在网上搜索,可以配置fetchSize=" ...

  10. We FALL ASleep At Night, We Do REST Right

    We Do Sleep At Night, We Do REST Right 前言 REST 起源 REST 约束 客户端 - 服务端 无状态 缓存 统一接口 分层系统 按需代码 统一接口约束 资源识 ...