安装的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. 微服务之springCloud-docker-feign配置(五)

    简介 上一节我们讨论了怎么用feign声明式调用cloud的生产者,这节我们讨论一下feign配置,通过编写配置类,我们可以自定义feign的日志级别,日志扫描目录,可以通过feign调用服务在eur ...

  2. 【WPF/C#】图层筛选/拾取——Color Picker

    文章标题实在不懂怎么表述才清楚. 描述问题:多个图片(图层)重叠时,如何通过鼠标点击来拾取到相应的图层.因为图层中会有很多空白的地方(比如图片四周),要求是获取鼠标点击位置的像素颜色值,如果为空白时或 ...

  3. Android——listview android:cacheColorHint,android:listSelector属性作用

    ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景图片,或者背景颜色时,滚动时listView会黑掉, 原因是,滚动时,列表里面的view重绘时,用的依 ...

  4. Java设计模式(11)外观模式(Facade模式)

    外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面. Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作: public class DBCompare { C ...

  5. greendao数据库初次使用的配置及多表关联的初始化

    1.在工程外层(Project)的build.gradle中添加依赖 buildscript { repositories { jcenter() } dependencies { classpath ...

  6. CSS2.0中最常用的18条技巧

    一.使用css缩写 使用缩写可以帮助减少你CSS文件的大小,更加容易阅读.  具体内容请浏览:CSS常用缩写语法 二.明确定义单位,除非值为0. 忘记定义尺寸的单位是CSS新手普遍的错误.在HTML中 ...

  7. PinnedListView分析二

    在PinnedListView分析一中还有一些细节在本文做一个补充,主要是view的绘制: 一个view在真正被绘制都是通过canvas来做,在ViewGroup内的z子view,一般再次此之前,还需 ...

  8. 关于Mac上的开发工具

    如果是JavaScript语言的话用  Intellij IDEA 如果是C/C++语言的话用  XCode

  9. Axiom3D:Ogre中Mesh网格分解成点线面。

    这个需求可能比较古怪,一般Mesh我们组装好顶点,索引数据后,直接放入索引缓冲渲染就好了.但是如果有些特殊需要,如需要标注出Mesh的顶点,线,面这些信息,以及特殊显示这些信息. 最开始我想的是自己分 ...

  10. Apache Commons CLI

    简单的说,就是对命令的参数进行定义和解析的工具 -- 这里说的参数是我们常用的说法,而CLI里则是Option.Options,参数值(如果有)则是Option的arg(s). ## 为什么 那么,为 ...