python 操作 redis

由官方文档而得
python 利用 redis 第三方库
首先安装
pip install redis
然后就可以开始愉快地使用了

import redis
r = redis.StricRedis(host='localhost', port=6379, db=0)
r.set('test', '1')
r.get('test')   # ->> '1'

注,r 方法一览:


dir(r)

dir(r)

默认情况下,响应以 Python3 的字节Python 2 的 str 形式返回,用户负责解码操作。
redis-py 实现了两个类来操作 redis

  1. StricRedis 尽量坚持官方语法,除了以下命令:
    • select 没有实现,考虑到了线程安全
    • del Python 关键字,用 delete 代替
    • config get|se 作为 config_get / config_set 实现
    • multi / exec 作为 Pipeline 类的一部分实现的。
  2. Redis 类是 StricRedis 的子类,提供向后的兼容性。推荐使用 StricRedis。Redis 覆盖了几个命令:
    • lrem num 和 value 参数顺序颠倒,num 提供默认值 0
    • zadd Redis类期望* args的形式为:name1,score1,name2,score2,...,而 StricRedis 是 score1,name1,score2,name2,...,这与 Redis 一样。
    • setex time 和 value 顺序颠倒。在 Redis 类中是:setex(key, value, time),在 StricRedis 类中是:setex(key, time, value)

连接池来操作

pool = redis.ConnectionPool(host = ' localhost ',port = 6379,db = 0)
r = redis.Redis(connection_pool = pool)

解析器

可以使用 Redis 官方维护的一个 C 库 hiredis
pip install hiredis

线程安全

可以在线程之间安全地共享 Redis 客户端实例。有一点需要注意:Redis SELECT命令。SELECT命令允许您切换连接当前使用的数据库。该数据库保持选定状态直到选择另一个数据库或连接关闭。这会产生一个问题,即连接可以返回到连接到不同数据库的池。因此不会实现 select 命令。
在线程之间传递PubSub或Pipeline对象是不安全的。

管道

一般用来执行事务操作

>>> r = redis.Redis(...)
>>> r.set('bing', 'baz')
>>> # Use the pipeline() method to create a pipeline instance
>>> pipe = r.pipeline()
>>> # The following SET commands are buffered
>>> pipe.set('foo', 'bar')
>>> pipe.get('bing')
>>> # the EXECUTE call sends all buffered commands to the server, returning
>>> # a list of responses, one for each command.
>>> pipe.execute()
[True, 'baz']

也可以进行链式操作

>>> pipe.set(' foo ',' bar ').sadd(' faz ',' baz ').incr(' auto_number ')。execute()
[True,True,6]

禁用原子性:
pipe = r.pipeline(transaction = False)
WATCH 监控命令:

>>> with r.pipeline() as pipe:
...     while 1:
...         try:
...            # 设置一个 watch
...             pipe.watch('OUR-SEQUENCE-KEY')
...             current_value = pipe.get('OUR-SEQUENCE-KEY')
...             next_value = int(current_value) + 1
...             # 开始事务
...             pipe.multi()
...             pipe.set('OUR-SEQUENCE-KEY', next_value)
...             # 执行
...             pipe.execute()
...             # 如果抛出 WatchError ,表示原子性失败
...             break
...        except WatchError:
...             # 另一个客户端修改了,我们必须重试
...             continue

由于 Pipeline 在 watch 期间绑定到单个连接,必须调用 reset() 来确保返回连接池,使用 with 上下文的话,它会自动调用。当然也可以手动调用:

>>> pipe = r.pipeline()
>>> while 1:
...     try:
...         pipe.watch('OUR-SEQUENCE-KEY')
...         ...
...         pipe.execute()
...         break
...     except WatchError:
...         continue
...     finally:
...         pipe.reset()

也可以使用 transaction() 方法来简化操作

>>> def client_side_incr(pipe):
...     current_value = pipe.get('OUR-SEQUENCE-KEY')
...     next_value = int(current_value) + 1
...     pipe.multi()
...     pipe.set('OUR-SEQUENCE-KEY', next_value)
>>>
>>> r.transaction(client_side_incr, 'OUR-SEQUENCE-KEY')
[True]

注:订阅发布模式还没有详细理解,故没写,以后用到了会写。

迭代器

>>> for key, value in (('A', '1'), ('B', '2'), ('C', '3')):
...     r.set(key, value)
>>> for key in r.scan_iter():
...     print key, r.get(key)
A 1
B 2
C 3
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容

  • python操作Redis 一. Redis是什么 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系...
    shu_ke阅读 3,830评论 0 9
  • Python操作redis python连接方式:点击 下面介绍详细使用 1、String 操作 redis中的S...
    子非初心阅读 235评论 0 1
  • 连接数据库 StrictRedis ConnectionPool 构造url方式连接到数据库,有以下三种模式: S...
    cnkai阅读 3,051评论 0 2
  • 昨天,我们讨论了python如何连接redis。今天我们要学习如何用python操作redis的数据。 这里,再补...
    阿尔卑斯山上的小灰兔阅读 1,306评论 0 0
  • 半倚窗扉立,村庄入眼漆。 亭台人鼎沸, 暑热褪罗衣。 注:新韵
    幽小窗阅读 641评论 78 44