python的redis简单使用

安装的Python版本 3.6.1redis

redis安装的2.8数据库

安装redis模块服务器

pip install redis

简单使用网络

redis-test.py性能

import redis
r=redis.Redis(host='127.0.0.1',port=6609,db=0)
r.set('name','baby')
print(r.get('name'))
print(r.dbsize())

使用connection pool来管理对一个redis server的全部链接,避免每次创建、释放链接的开销。spa

默认,每一个Redis实例都会维护一个本身的链接池。code

能够直接创建一个链接池,而后做为参数 Redis,这样就能够实现多个Redis实例共享一个链接池server

使用链接池对象

import redis
 pool = redis.ConnectionPool(host='127.0.0.1',port=6609)
 r = redis.Redis(connection_pool=pool)
 r.set('name1','lili')
 print(r.get('name1'))

 

应用:页面点击数blog

  须要对一系列页面记录点击次数,若是使用关系数据库来存储点击,可能存在大量的行级锁争用

  (1)当redis服务器启动时,能够从关系数据库读入点击数的初始值

import redis
r=redis.Redis(host='127.0.0.1',port=6609,db=0)
r.set('visits:100',999)

  (2)有人访问页面时

r.incr('visits:100')

  (3)获取页面点击数

r.get('visits:100')

Pipeline 是 StrictRedis 类的子类,支持在一个请求里发送缓冲的多个命令。经过减小客户端和服务器之间往来的数据包,能够大大提升命令组的性能

简单使用

复制代码

>>>import redis 
>>>r=redis.Redis(host='127.0.0.1',port=6609,db=0)
>>> r.set('name', 'baby')
>>> pipe = r.pipeline()
>>> pipe.set('birthday', '2010')
>>> pipe.get('name')
>>> pipe.execute()

复制代码

为了方便使用,全部缓冲到 pipeline 的命令返回 pipeline 对象自己

调用能够链接起来

>>> pipe.set('name', 'baby').set('birthday', '2010').get('name').execute()

pipeline 也能够保证缓冲的命令组作为一个原子操做

要使用命令缓冲,但禁止pipeline 的原子操做属性,关掉 transaction

pipe = r.pipeline(transaction=False)

WATCH 命令提供了在开始事务前监视一个或多个键

这些键中的任何一个在执行事务前发生改变,整个事务就会被取消并抛出 WatchError 异常

复制代码

import redis
import time
r=redis.Redis(host='127.0.0.1',port=6609,db=0)
sellerid = 101
itemid = 101
price = 50
print(time.time())
def list_item(r,itemid,sellerid,price):
    inventory = "inventory:%s"%sellerid
    item = "%s.%s"%(itemid,sellerid)
    end = time.time()+5
    pipe = r.pipeline()
    while time.time()<end:
        try:
            pipe.watch(inventory)
            if not pipe.sismember(inventory,itemid):
                pipe.unwatch()
                return None
            pipe.multi()
            pipe.zadd("market:",item,price)
            pipe.srem(inventory,itemid)
            pipe.execute()
            return True
        except redis.exceptions.WatchError:
            pass
        return False
        
list_item(r,itemid,sellerid,price)

复制代码

redis只会在数据已经被其余客户端抢先修改了的状况下,通知执行了WATCH命令的客户端,即--乐观锁

而关系型数据库执行的加锁操做为悲观锁,这种方式下持有锁的客户端运行越慢,等待解锁的客户端被阻塞的时间越长

1

事务由命令MULTI命令启动,而后须要传递一个应该在事务中执行的命令列表,而后整个事务由EXEC命令执行

若是在watch后值被修改,在执行pipe.execute()的时候会报异常WatchError: Watched variable changed

redis只会在本身的事务执行失败时重试

流水线:一次性发送多个命令,而后等待全部回复出现。能够经过减小客户端与redis服务器之间的网络通讯次数来提高redis在执行多个命令时的性能

相关文章
相关标签/搜索