zoukankan      html  css  js  c++  java
  • 数据库之redis篇(3)—— Python操作redis

    虽然前面两篇已经说了redis的一些配置安装什么的,篇幅有点长,可能看完了也不知道怎么操作,这里再浓缩一下:

    什么是redis

    redis完全开源免费的,遵守BSD协议,是一个高性能的非关系型key-value数据库,

    redis特点:

    • redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用,相比memcache,redis可以持久化存储,这是memcache没有的。
    • redis支持五种数据类型。
    • redis支持数据库备份。

    redis优势:

    • redis性能极高,读的速度是110000次/s,写的速度是81000次/s。
    • redis支持数据类型:String,Lists,Hashes,Sets以及Ordered Sets。
    • redis的所有操作都是原子性的,多个操作支持事物,即MULTI和EXEC指令包起来,但是多个事物来说不是原子性的,mysql的多个事物是原子性的。
    • redis支持publish/subscribe,通知,key过期等等特性。

    redis 配置

    可以通过redis-cli 进入交互模式,使用config命令查看或设置配置项。也可以进入配置文件用vim编辑器进行修改

    redis简单使用

    启动服务端:

    启动客户端,keys * 查看当前数据库里存储的key-value

    查看数据:lrange key名 0 -1

    Python操作redis

    安装redis库

    连接redis,基本操作 

    先看redis的源码,实例化Redis对象时,提供了以下的参数

    连接并添加数据

    连接时根据当前的开发环境来设置参数,我这里的是127.0.0.1,端口就是6379,密码为空,由上面的源码得知,Redis默认就是这些参数,所以我只设置host就行了。自行根据自己的开发环境设置参数

    set方法是两个参数,分别是key-value,hset是三个参数,第一个是数据库的key值,第二个和第三个是字典的key和value

    在运行之前数据库的数据有这些:

    运行,然后在终端查看:

     

     查询,利用get和hget获取值

    发现值是bytes格式,在连接的时候可以加个参数让取出来的值都是字符串:decode_responses=True

    刚才的hset是可以再value那一层加个字典,如果还想套一层,可以用hmset:

    取值,用hmget取出来是一个列表形式,内容时改字典的value值,hgetall就是全部拿出来了

    redis连接池

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

    如下,后面的操作其实都是一样的了

     当然你可以用max_connections设置最大连接数:

    发布者订阅者模型

    发布者:

    订阅者:

     

    先启动多个订阅者:

     

    启动发布者:

    订阅者返回结果:
    三个sub订阅者返回的结果都是如下:

    那么这parse_response到底是什么呢,打印看看,在未接受到数据之前,它默认是1,接收到数据之后就是接收的数据

    有没有发现其实比mysql还简单很多

    常用方法:

    set(name, value, ex=None, px=None, nx=False, xx=False)
    #在Redis中设置值,默认是不存在则创建,存在则修改
    参数:
    ex,过期时间(秒)过期后值None
    px,过期时间(毫秒)
    nx,如果设置为True,则只有name不存在时,当前set操作才执行
    xx,如果设置为True,则只有name存在时,当前set操作才执行
    
    # 注:ex,px,nx,xx可以跟在命令后面 eg: setnx 表示只能创建 hash命令一样适用
    
    get(key)  获取key的值
    
    mset(*args, **kwargs)  批量设置值
    
    mget(key, *args)
    
    hset(name, key, value)  增加单个 不存在则创建
    
    hget(name, key)  获取单个
    
    hmset(name, mapping)  批量增加 mapping为字典
    
    hgetall(name) 获取name对应hash的所有键值
    
    hlen(name)  获取name对应的hash中键值对的个数
    
    hkeys(name)  获取name对应的hash中所有的key的值
    
    hvals(name)  获取name对应的hash中所有的value的值
    
    hexists(name, key)  检查name对应的hash是否存在当前传入的key
    
    hdel(name,*keys)   将name对应的hash中指定key的键值对删除
    
    hscan_iter(name, match=None, count=None)  利用yield封装hscan创建生成器,实现分批去redis中获取数据
    参数:
    match,匹配指定key,默认None 表示所有的key
    count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
    lpush(name,values)  在name对应的list中左边添加元素 没有就新建
    
    llen(name) 获取name对应的列表长度
    
    lrang(name, index1, index2)按照index切片取出name对应列表里值
    
    lpushx(name, value)  只能添加不能新建
    
    linsert(name, where, refvalue, value))  在name对应的列表的某一个值前或后插入一个新值
    参数:
    name,redis的name
    where,BEFORE或AFTER
    refvalue,标杆值,即:在它前后插入数据
    value,要插入的数据 
    
    lset(name, index, value)  给指定索引修改值
    
    lrem(name, value, num)  在name对应的list中删除指定的值
    
    参数:
    name,redis的name
    value,要删除的值
    num, num=0,删除列表中所有的指定值;
    num=2,从前到后,删除2个; num=1,从前到后,删除左边第1个
    num=-2,从后向前,删除2个
    
    lindex(name, index)  在name对应的列表中根据索引获取列表元素

    当然redis还有支持django的数据库模块,pip install django-redis即可

  • 相关阅读:
    15个常用的Excel函数公式
    Excel常用公式大全
    Python+Selenium-select
    Python+Selenium--操作测试对象
    Python+Selenium--鼠标事件
    Python+Selenium--键盘事件
    Python+Selenium--设置等待时间
    Python+Selenium--定位iframe中的对象
    Python+Selenium--启动及关闭浏览器
    Tomcat安装详解
  • 原文地址:https://www.cnblogs.com/Eeyhan/p/10434730.html
Copyright © 2011-2022 走看看