python的redis简单使用
安装的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简单使用的更多相关文章
- python和redis简单交互
python和redis简单交互 1.安装redis模块 pip3 install redis 2.redis模块简单使用: # /usr/bin/env python3 import redis c ...
- Python 用Redis简单实现分布式爬虫
Redis通常被认为是一种持久化的存储器关键字-值型存储,可以用于几台机子之间的数据共享平台. 连接数据库 注意:假设现有几台在同一局域网内的机器分别为Master和几个Slaver Master连接 ...
- python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用
python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用 redispy安装安装及简单使用:https://github.com/andymccurdy/r ...
- Python redis 简单介绍
Python redis 简单介绍 1.安装 终端输入: pip(or)pip3.6 install redis 安装成功 2.哈哈,发现我并没有redis服务可以访问,所以到这里,在本机安装了red ...
- Python使用Redis实现一个简单作业调度系统
Python使用Redis实现一个简单作业调度系统 概述 Redis作为内存数据库的一个典型代表,已经在非常多应用场景中被使用,这里仅就Redis的pub/sub功能来说说如何通过此功能来实现一个简单 ...
- 【python】Redis介绍及简单使用
一.redis redis是一个key-value存储系统.和 Memcached类似,它支持存储的value类型相对更多,包括string(字符串). list(链表).set(集合).zset(s ...
- python,redis简单订阅
python连接redis import redis r =redis.Redis(host='192.168.199.11',port = 6379 ,db = 0) r.publish('chan ...
- python之redis和memcache操作
Redis 教程 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据 ...
- python——操作Redis
在使用django的websocket的时候,发现web请求和其他当前的django进程的内存是不共享的,猜测django的机制可能是每来一个web请求,就开启一个进程去与web进行交互,一次来达到利 ...
随机推荐
- Django的安装要点
Django 的安装: 安装包: 百度盘里搜索"Django-1.7.tar.gz" 安装环境 WIN7 解压文件 移动到python安装目录下 python setup.py i ...
- <魔鬼投资学>读书笔记
书在这里 太多的投资者沉溺于结果,但却忽略了过程 在任何一个存在不确定系的领域中,比如投资.管理球队或是赌马,最优秀的长期成功者都会更重视过程,而不是结果 投资过程的目的:认识一家公司股票现在价格与未 ...
- ubuntu 安装 mkfs.ubifs
ubi 文件系统的制作需要 mkfs.ubifs 工具 但是又没有直接的 sudo apt-get install , 只能通过以下方式 sudo apt-get install mtd-utils
- 高并发TCP连接数目问题
linux可通过五元组唯一确定一个链接:源IP,源端口,目的IP,目的端口,传输层协议.而一个端口不允许被两个及以上进程占用(一个进程可同时占用多个端口),据此是否可以推测一台linux服务器最多可以 ...
- sql 拼接同列的值
sql中有时需要将列的值转成行的形式,比如下面的数据,具有相同Path的ZumenID有哪一些,该怎么做呢? 常见的做法可以参见这篇文章http://www.cnblogs.com/xiashengw ...
- Linux排序命令sort详解
语法格式sort [ -A ] [ -b ] [ -c ] [ -d ] [ -f ] [ -i ] [ -m] [ -n ] [ -r ] [ -u ] [ -o OutFile ][ -t Cha ...
- Git 提交更改
Jerry 已经提交的更改,他想纠正他的最后一次提交,在这种情况下,git 的修改将帮助操作.最后提交修改操作的变化,包括提交信息,它创建新的提交ID. 修改操作之前,他会检查提交日志. [jerry ...
- Git 基本概念
版本控制系统 (VCS) 版本控制系统 (VCS) 是软件,帮助软件开发人员携手合作,他们的工作并保持完整的历史. 以下是VCS目标 允许开发人员同步工作. 不要覆盖对方的变化. 维护历史的每一个版本 ...
- 无法转换json问题 Error: Model.nodeDataArray value is not an instance of Array or NodeList or HTMLCollection
var jsonobj=eval('('+t+')'); 使用eval 函数,讲后台json字符串转换为前台jsarray数组. 如果使用 ajax不会出现这种情况,因为会自动转换. 但是如果直接从后 ...
- JS设计模式学习实例之单例模式
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...