Redis之Python 使用 Redis
Python 使用 Redis
参考文档:
http://redis.cn/clients.html#python
https://github.com/andymccurdy/redis-py
安装Redis
$ sudo pip install redis
简单的redis操作
字符串string操作
In [1]: import redis
In [2]: r = redis.StrictRedis(host='localhost', port=6379, db=0, password='foobared')
In [3]: r.set('foo', 'bar')
Out[3]: True
In [4]: r.get('foo')
Out[4]: 'bar'
In [5]: r['foo']
Out[5]: 'bar'
In [6]: r.delete('foo')
Out[6]: 1
In [7]: r.get('foo')
pipeline操作
管道(pipeline)是redis在提供单个请求中缓冲多条服务器命令的基类的子类。它通过减少服务器-客户端之间反复的TCP数据库包,从而大大提高了执行批量命令的功能。
>>> p = r.pipeline() --创建一个管道
>>> p.set('hello','redis')
>>> p.sadd('faz','baz')
>>> p.incr('num')
>>> p.execute()
[True, 1, 1]
>>> r.get('hello')
'redis'
管道的命令可以写在一起,如:
>>> p.set('hello','redis').sadd('faz','baz').incr('num').execute()
1
默认的情况下,管道里执行的命令可以保证执行的原子性,执行pipe = r.pipeline(transaction=False)可以禁用这一特性。
字符串应用场景 – 页面点击数
假定我们对一系列页面需要记录点击次数。例如论坛的每个帖子都要记录点击次数,而点击次数比回帖的次数的多得多。如果使用关系数据库来存储点击,可能存在大量的行级锁争用。所以,点击数的增加使用redis的INCR命令最好不过了。
当redis服务器启动时,可以从关系数据库读入点击数的初始值(1237这个页面被访问了34634次)
>>> r.set("visit:1237:totals",34634)
True
每当有一个页面点击,则使用INCR增加点击数即可。
>>> r.incr("visit:1237:totals")
34635
>>> r.incr("visit:1237:totals")
34636
页面载入的时候则可直接获取这个值
>>> r.get ("visit:1237:totals")
'34636'
使用hash类型保存多样化对象
应用场景
比如我们要存储一个用户信息对象数据, 用户的姓名、年龄、生日等,修改某一项的值。Redis的Hash结构可以使像在数据库中Update一个属性一样只修改某一项属性值。

Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口,如下图:
>>> r.hset('users:jdoe', 'name', "John Doe")
1L
>>> r.hset('users:jdoe', 'age', 25)
1L
>>> r.hset('users:jdoe', 'birthday', '19910101')
1L
>>> r.hgetall('users:jdoe')
{'age': '26', 'birthday': '19910101', 'name': 'John Doe'}
>>> r.hkeys('users:jdoe')
['name', 'age', 'birthday']
>>> r.hincrby('users:jdoe', 'age', 1)
26L
>>> r.hgetall('users:jdoe')
>>> {'age': '26', 'birthday': '19910101', 'name': 'John Doe'}
Set集合应用场景 – 社交圈子数据
在社交网站中,每一个圈子(circle)都有自己的用户群。通过圈子可以找到有共同特征(比如某一体育活动、游戏、电影等爱好者)的人。当一个用户加入一个或几个圈子后,系统可以向这个用户推荐圈子中的人。 我们定义这样两个圈子,并加入一些圈子成员。
>>> r.sadd('circle:game:lol','user:debugo')
1
>>> r.sadd('circle:game:lol','user:leo')
1
>>> r.sadd('circle:game:lol','user:Guo')
1
>>> r.sadd('circle:soccer:InterMilan','user:Guo')
1
>>> r.sadd('circle:soccer:InterMilan','user:Levis')
1
>>> r.sadd('circle:soccer:InterMilan','user:leo')
1
获得某一圈子的成员
>>> r.smembers('circle:game:lol')
set(['user:Guo', 'user:debugo', 'user:leo'])
可以使用集合运算来得到几个圈子的共同成员:
>>> r.sinter('circle:game:lol', 'circle:soccer:InterMilan')
set(['user:Guo', 'user:leo'])
>>> r.sunion('circle:game:lol', 'circle:soccer:InterMilan')
set(['user:Levis', 'user:Guo', 'user:debugo', 'user:leo'])
推荐游戏soccer:InterMilan:
>>> r.sdiff('circle:soccer:InterMilan', 'circle:game:lol')
>>> {'user:Levis'}
Redis之Python 使用 Redis的更多相关文章
- Django day 34 过滤课程,登录,redis,python操作redis
一:过滤课程, 二:登录 三:redis, 四:python操作redis
- Redis 以及 Python操作Redis
Redis Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis有以下特点: -- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可 ...
- 八十九:redis之python操作redis
安装:pip install redis 连接 字符串操作 插入值 获取 删除值 列表操作,更多操作见源码 添加 获取 集合操作,更多操作见源码 哈希操作,更多操作见源码 事务操作:cache.pip ...
- Redis在python中的使用
一 简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted ...
- edis 以及 Python操作Redis
Redis 以及 Python操作Redis Redis Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis有以下特点: -- Redis支持数据的持 ...
- 【python】redis基本命令和基本用法详解
[python]redis基本命令和基本用法详解 来自http://www.cnblogs.com/wangtp/p/5636872.html 1.redis连接 redis-py提供两个类Redis ...
- Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》
首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...
- python之redis和memcache操作
Redis 教程 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据 ...
- Python—操作redis
Python操作redis 连接方式:点击 1.String 操作 redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值,默认不存在则创建, ...
随机推荐
- Android内存优化总结【整理】
http://blog.csdn.net/tiantangrenjian/article/details/39182293 [前段时间接到任务着手进行app的内存优化,从各种各样的渠道搜索相关资料,最 ...
- CentOS下PostgreSQL的安装与配置
一.CentOS下PostgreSQL的yum安装: #安装yum源,默认源存在对版本的支持不好,下载不到等等问题. yum install http://yum.postgresql.org/9.5 ...
- 【Android】Android--Dialog
前言 对话框对于应用也是必不可少的一个组件,在Android中也不例外,对话框对于一些提示重要信息,或者一些需要用户额外交互的一些内容很有帮助.本篇博客就讲解一下Android下对话框的使用,在本篇博 ...
- AB压力测试工具
1.安装AB工具: yum install httpd-tools 2.测试: ab -n -c http://localhost.com/ 其中-n表示请求数,-c表示并发数 3.测试结果 [roo ...
- Page Control
- apidemos编译出错
编译api 19的(4.4.2)apidemos一直报xml相关资源出错. 把build-toos 22删除,替换成19版本的,就ok了. 真是坑啊. 学习新东西难免遇到坑.
- 过山车---hdu2063(最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063最大匹配模板题: #include <iostream> #include <c ...
- Ubuntu18.04下安装比特币客户端
一.下载有两种安装方式:安装包和源码 二.安装1.通过安装包安装在https://bitcoin.org/en/download下载Windows,Mac OSX,Linux对应的安装包.安装过程比较 ...
- android(十五) FTP的两种工作模式
(一)PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链 当需要传送数据时,客户端在命令链路上用 PORT命令告诉服务器:“我打开了 ...
- 【Loadrunner】性能测试报告实战
一.一份好的性能测试报告需要遵循什么规则? 好的报告只需要遵循3点即可:清晰的结构.简要的语言以及数据的对比. 二.如何用Loadrunner自动到处HTML以及word版的报告? 1.导出html格 ...