python中redis的使用

Redis 简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。redis会周期性的把更新的数据写入磁盘或把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步
Redis与其他key-value存储有什么不同?
  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

python操作redis

连接数据库

redis提供两个类Redis和StrictRedis, StrictRedis用于实现大部分官方的命令,Redis是StrictRedis的子类,用于向后兼用旧版本。

import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)

备注:默认redis有16个数据库,即db0~db15, 一般存取数据如果不指定库的话,默认都是存在db0中。

简单redis操作

>>> r.set('name', 'jihite')
True
>>> r.set('score', 100)
True
>>> r.keys()
['score', 'name']
>>> r.get('name')
'jihite'
>>> r.get('score')
'100'
>>> r.delete('score')
>>> r.keys()
['name']
>>> r.save()
True
>>> r.keys()
['name']
>>> r.flushdb()
True
>>> r.keys()
[]
管道pipeline操作

管道是redis在提供单个请求中缓存多条服务器命令的基类的子类,它通过减少服务器-客户端之间反复的TCP数据库包,从而大大提高了执行批量命令的性能。

redis默认在执行每次请求都会创建(连接池申请链接)和断开(归还连接池)一次连接操作,如果想要再一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline是原子性操作。


例子
>>> p = r.pipeline()
>>> p.hset('myset', 'name', 'jihite')
Pipeline<ConnectionPool<Connection<host=localhost,port=6379,db=0>>>
>>> p.hset('myset', 'score', 100)
Pipeline<ConnectionPool<Connection<host=localhost,port=6379,db=0>>>
>>> p.hget('myset', 'name')
Pipeline<ConnectionPool<Connection<host=localhost,port=6379,db=0>>>
>>> p.execute()
[1L, 1L, 'jihite']
>>> r.hget('myset', 'name')
'jihite'
>>> r.hget('myset', 'score')
'100'
注:管道命令可以写在一起,如:
>>> p = r.pipeline()
>>> p.set('name', 'jihite').set('score',100).set('school', 'bupt').get('score').execute()
[True, True, True, '100']

又如:

#!/usr/bin/env python
    # -*- coding:utf-8 -*-
 
    import redis
 
    pool = redis.ConnectionPool(host='0.0.0.0', port=6379)
 
    r = redis.Redis(connection_pool=pool)
 
    # pipe = r.pipeline(transaction=False)
    pipe = r.pipeline(transaction=True)
 
    r.set('name', 'python')
    r.set('age', '18')
 
    pipe.execute()

Connection Pools

redis-py通过连接pool来管理连接到Redis Server,默认每一个Redis连接实例会自动创建一个自己的链接pool,可以利用一个已经存在在链接pool.
>>> pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
>>> r = redis.Redis(connection_pool=pool)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值