数据库之redis篇(3)—— Python操做redis

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

什么是redis

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

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编辑器进行修改sql

 

redis简单使用

启动服务端:数据库

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

 

查看数据:lrange key名 0 -1vim

 

 

Python操做redis

安装redis库

 

链接redis,基本操做 

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

 

链接并添加数据编辑器

链接时根据当前的开发环境来设置参数,我这里的是127.0.0.1,端口就是6379,密码为空,由上面的源码得知,Redis默认就是这些参数,因此我只设置host就好了。自行根据本身的开发环境设置参数性能

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

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

 

运行,而后在终端查看:

 

 

 查询,利用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便可

相关文章
相关标签/搜索