安装的Python版本 3.6.1

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的所有连接,避免每次建立、释放连接的开销。

默认,每个Redis实例都会维护一个自己的连接池。

可以直接建立一个连接池,然后作为参数 Redis,这样就可以实现多个Redis实例共享一个连接池

使用连接池

 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'))

应用:页面点击数

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

  (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', '')
>>> pipe.get('name')
>>> pipe.execute()

为了方便使用,所有缓冲到 pipeline 的命令返回 pipeline 对象本身

调用可以连接起来

>>> pipe.set('name', 'baby').set('birthday', '').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命令的客户端,即--乐观锁

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

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

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

redis只会在自己的事务执行失败时重试

流水线:一次性发送多个命令,然后等待所有回复出现。可以通过减少客户端与redis服务器之间的网络通信次数来提升redis在执行多个命令时的性能

python的redis简单使用的更多相关文章

  1. python和redis简单交互

    python和redis简单交互 1.安装redis模块 pip3 install redis 2.redis模块简单使用: # /usr/bin/env python3 import redis c ...

  2. Python 用Redis简单实现分布式爬虫

    Redis通常被认为是一种持久化的存储器关键字-值型存储,可以用于几台机子之间的数据共享平台. 连接数据库 注意:假设现有几台在同一局域网内的机器分别为Master和几个Slaver Master连接 ...

  3. python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用

    python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用 redispy安装安装及简单使用:https://github.com/andymccurdy/r ...

  4. Python redis 简单介绍

    Python redis 简单介绍 1.安装 终端输入: pip(or)pip3.6 install redis 安装成功 2.哈哈,发现我并没有redis服务可以访问,所以到这里,在本机安装了red ...

  5. Python使用Redis实现一个简单作业调度系统

    Python使用Redis实现一个简单作业调度系统 概述 Redis作为内存数据库的一个典型代表,已经在非常多应用场景中被使用,这里仅就Redis的pub/sub功能来说说如何通过此功能来实现一个简单 ...

  6. 【python】Redis介绍及简单使用

    一.redis redis是一个key-value存储系统.和 Memcached类似,它支持存储的value类型相对更多,包括string(字符串). list(链表).set(集合).zset(s ...

  7. python,redis简单订阅

    python连接redis import redis r =redis.Redis(host='192.168.199.11',port = 6379 ,db = 0) r.publish('chan ...

  8. python之redis和memcache操作

    Redis 教程 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据 ...

  9. python——操作Redis

    在使用django的websocket的时候,发现web请求和其他当前的django进程的内存是不共享的,猜测django的机制可能是每来一个web请求,就开启一个进程去与web进行交互,一次来达到利 ...

随机推荐

  1. Thinkphp CURD中的where方法

    今天来给大家讲下查询最常用但也是最复杂的where方法,where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的设置.where方法的用法是ThinkPHP查询语言的精髓,也是Think ...

  2. [转]python进行中文文本聚类(切词以及Kmeans聚类)

    简介 查看百度搜索中文文本聚类我失望的发现,网上竟然没有一个完整的关于Python实现的中文文本聚类(乃至搜索关键词python 中文文本聚类也是如此),网上大部分是关于文本聚类的Kmeans聚类的原 ...

  3. Spring WebSocket初探2 (Spring WebSocket入门教程)<转>

    See more: Spring WebSocket reference整个例子属于WiseMenuFrameWork的一部分,可以将整个项目Clone下来,如果朋友们有需求,我可以整理一个独立的de ...

  4. Github ——转

    Github 简明教程 分类 编程技术 如果你是一枚Coder,但是你不知道Github,那么我觉的你就不是一个菜鸟级别的Coder,因为你压根不是真正Coder,你只是一个Code搬运工. 但是你如 ...

  5. andorid——自定义seekbar(转)

    xml 新建=>xml=>values <?xml version="1.0" encoding="utf-8"?> <resou ...

  6. Java编程的逻辑 (53) - 剖析Collections - 算法

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  7. 阻止SPY++类似的程序捕捉软件窗口

    我以前用Spy++能轻易捕捉360软件界面,除了一些应用DHTML制作的窗体.昨天我再用Spy++捕捉的时候捕捉不到了,甚至连最外围的对话框都捕捉不到,显然是做了类似拦截API的处理.下面我也模拟一下 ...

  8. DataTable 行删除

    今天在阅读一个项目中的代码时,发现删除DataTable的数据时用的dataTable.Clear(); 由于以前自己习惯都是用dataTable.Rows.Clear();因此突然感觉到很茫然,难道 ...

  9. mysql查找有某列但没有此列索引的表

    select a.TABLE_SCHEMA,a.TABLE_NAME from information_schema.`COLUMNS` a left join (select 'etl_stamp' ...

  10. jquery 回车事件实现代码

    // 键盘事件 1.keydown()  keydown事件会在键盘按下时触发. 2.keyup()  keyup事件会在按键释放时触发,也就是你按下键盘起来后的事件 3.keypress()  ke ...