date:20140530
auth:jin
http://github.com/andymccurdy/redis-py
https://github.com/andymccurdy/redis-py/blob/master/README.rst

一.安装
# yum -y install python-redis
# zypper install python-redis

二.使用
1.连接
import redis
r = redis.Redis(host='127.0.0.1', port=6380, db=1)
或者
r = redis.Redis(unix_socket_path='/tmp/redis.sock')

#help(r)

连接池

>>> pool = redis.ConnectionPool(host='localhost', port=6379, db=0)

>>> r = redis.Redis(connection_pool=pool)

在python中报错,在pypy中可以

更新redis模块由2.0.0升级到2.10.3

# easy_install -U redis

>>> import redis
>>> pool = redis.ConnectionPool(host='localhost', port=6379, db=0)

可以了

2 看信息 r.info()
info = r.info()
for key in info:
print "%s: %s" % (key, info[key])

3 查数据库大小 r.dbsize()
print '\ndbsize: %s' % r.dbsize()

4 看连接 r.ping()
print "ping %s" % r.ping()

5 设置key 和value
(1)添加
>>> r = redis.Redis(host='127.0.0.1', port=6380, db=1)
>>> r = redis.StrictRedis(host='127.0.0.1', port=6380, db=0)
>>> r.set('name','jin')
True
>>> r.get('name')
'jin'

字典赋值方式
>>> r['sex'] = 1
>>> r.get('sex')
'1'

append key-value 方式
>>> r.append('email','test@qq.com')
11L
>>> r.get('email')
'test@qq.com'

2)删除
对象delete方法
>>> r.delete('sex')
1
>>> r.delete('sex')
0
del方式
>>> r.get('name')
'jin'
>>> del r['name']
>>> r.get('name')

6.其他key value方法
1).r.exists() 判断是否有key
>>> r.exists('email')
True

2)r.flushdb()
flushall 清空当前主机的数据
flushdb() 清空当前库的数据
>>> r.dbsize()
2L
>>> r.flushdb()
True
>>> r.dbsize()
0L
| flushall(self)
| Delete all keys in all databases on the current host
|
| flushdb(self)
| Delete all keys in the current database
3)列出所有key r.keys()
>>> r.keys()
['name', 'sex', 'level']
便利key获取value
for i in r.keys():
print r.get(i)

通配符
>>> r.keys('a*')
['a', 'a1', 'age']
随机
>>> r.randomkey()
'age'

7.获取数据类型
>>> print r.type('name')
string

三、各种数据类型
它有四种类型: string(key,val)、list(序列)、set(集合)、zset(有序集合,多了一个顺序属性)
(一)、string操作
>>> r.set('name','jin')
True
>>> r['level']=11
>>> r.append('age',28)
2L

#这里有个getset属性,如果为Tr 可以在存新数据时将上次存储内容同时返回出来
>>> r.getset('c2','jj')
'jj'
>>> r.getset('c2','ab')
'jj'
>>> r.get('c2')
'ab'

#设置一个递增的整数 每执行一次它自加1(可以指定偏移):
>>> r.incr('age')
31
>>> r.incr('age')
32
>>> r.get('age')
'32'
>>> r.incr('age',10)
42
>>> r.get('age')
'42'

#设置一个递减的整数 每执行一次它自减1(可以指定偏移)
>>> print 'decr:',r.decr('b1')
decr: -1
>>> print 'decr:',r.decr('b1')
decr: -2
>>> print 'decr:',r.decr('b1',10)
decr: -12

# 取value
get方法
>>> r.get('a1')
'12'
字典方法
>>> r['a1']
'12'

#同时取一批
>>> r.mget('a1','b1')
['12', '-12']

###取key
列出所有key
>>> r.keys()
['name', 'sex', 'level']
便利key获取value
for i in r.keys():
print r.get(i)
通配符
>>> r.keys('a*')
['a', 'a1', 'age']
随机
>>> r.randomkey()
'age'

# 查看一个数据有没有 有 1 无0
print 'existes:',r.exists('a')

# 删数据 1是删除成功 0和None是没这个东西
对象delete方法
>>> r.delete('sex')
1
>>> r.delete('sex')
0
del方式
>>> r.get('name')
'jin'
>>> del r['name']
>>> r.get('name')

# 其他
r.rename('name','uname') #改名
>>> r.expire('uname',10) #让数据10秒后过期
True
>>> r.exists('uname')
False
>>> r.ttl('level') #看剩余过期时间 不存在或者没有设置过期时间是没有任何返回的
55L
>>> r.ttl('uname')

>>> r.expire('a1',10)
True
>>> r.ttl('a1')
7L
>>> r.ttl('a1')
6L
>>> r.ttl('a1')
-2L
>>> r.exists('a1')
False
过期后没这个key了

整理:
添加K-V:
r.set('name','jin')
r.append('age',28)
r.getset('name','diege') 存新数据时将上次存储内容同时返回出来
r.incr('age',10) 递增赋值,每执行一次它自加一个步长(可以指定偏移)
r.decr('age',10) 递减赋值,每执行一次它自加一个步长(可以指定偏移)
获取value
r.get('name')
r['name']
同时取一批:r.mget('a1','b1')
删除:
对象delete方法 r.delete('sex')删数据1是删除成功 0和None是没这个东西
del方式 del r['name']

(二)、序列(list)操作
# 双向序列,两头通的
左塞
>>> r.lpush('b','b1')
1L
>>> r.lpush('b','b2')
2L
lpushx(self, name, value)
Push ``value`` onto the head of the list ``name`` if ``name`` exists
对象不存在的话,不会添加,返回0

# 看长度
>>> r.llen('b')
2

# 列出一批出来
>>> r.lrange('b',start=0,end=-1)
['b2', 'b1']
>>> r.lrange('b',start=0,end=2)
['b4', 'b5', 'b4']
包括end
q
右塞
>>> r.rpush('b','b3')
3L
>>> r.lrange('b',start=0,end=-1)
['b2', 'b1', 'b3']

# 取出一位
>>> r.lindex('b',0)
'b2'
>>> r.lindex('b',-1)
'b1'

# 修剪列表
#若start 大于end,则将这个list清空
>>> r.ltrim('b',start=0,end=2)
True
>>> r.lrange('b',start=0,end=-1)
['b4', 'b5', 'b4']
和切片还不一样,包括了end

# 排序
>>> r.lrange('c',start=0,end=-1)
['1', '3', '5', '3', '2']
>>> r.sort('c')
['1', '2', '3', '3', '5']
>>> r.lrange('d',start=0,end=-1)
['a1', 'a3', 'a2', 'b1', 'b3', 'b2']
>>> r.sort('d')
Traceback (most recent call last):
redis.exceptions.ResponseError: One or more scores can't be converted into double

#移除并返回r.rpop()
>>> r.lrange('a',start=1,end=-1)
['4', '2', '4', '2', '1', '1', '2', '3']
>>> r.rpop('a')
'3'
>>> r.lrange('a',start=1,end=-1)
['4', '2', '4', '2', '1', '1', '2']

删除列表元素lrem
| lrem(self, name, value, num=0)
| Remove the first ``num`` occurrences of elements equal to ``value``
| from the list stored at ``name``.
|
| The ``num`` argument influences the operation in the following ways:
| num > 0: Remove elements equal to value moving from head to tail.
| num < 0: Remove elements equal to value moving from tail to head.
| num = 0: Remove all elements equal to value.

>>> r.lrem('a',4)
2L
>>> r.lrange('a',start=1,end=-1)
['2', '2', '1', '1', '2']
num=0时删除所有匹配该值的元素
['2', '2', '1', '1', '2']
num>0时从头到尾的删除
>>> r.lrem('a',2,1)
1L
>>> r.lrange('a',start=1,end=-1)
['2', '1', '1', '2']
num<0时从尾到头的删除
>>> r.lrange('a',start=1,end=-1)
['2', '1', '1']
同时这个num也是要删除的个数
>>> r.lrem('a',1,2)
2L
>>> r.lrange('a',start=1,end=-1)
['2']

整理:
向序列添加数据
r.rpush('a',1) 右添加
r.lpush('a',3) 左添加
r.lpushx(name, value)对象不存在的话,不会添加,返回0
获序列长度 r.llen('b')
取出序列中制定位置的元素 r.lindex('b',2)
查看序列所有元素 r.lrange('a',start=1,end=-1)
修剪序列 r.ltrim('a',start=0,end=2) 得到剩下的,包含end位置的元素。若start 大于end,则将这个序列清空
排序 r.sort('a') #序列是字符串没有成功
从序列中删除元素并返回 r.rpop()
从序列中删除元素 r.lrem(name, value, num) num是删除的个数,num = 0全部删除,num>0时从头到尾的删除,num<0时从尾到头的删除
清空序列:r.ltrim('a',start=1,end=0) 裁剪的特殊用法

(三)集合
# 塞数据 sadd
>>> r.sadd('b','b1')
1
>>> r.sadd('b','b2')
1
>>> r.sadd('b','b3')
1

# 获取集合元素个数,不存在的集合为0 scard
>>> r.scard('b')
3
>>> r.scard('c')
0

# 判断set中是否有元素 sismember
>>> r.sismember('b','b1')
True
>>> r.sismember('b','b5')
False

# 求交集 sinter
>>> r.sadd('d','d1')
1
>>> r.sadd('d','d2')
1
>>> r.sadd('d','d3')
1
>>> r.sadd('d','b2')
1
>>> r.sinter('b','d')
set(['b2'])

#求交集并将结果赋值 sinterstore
>>> r.sinterstore('newvar','b','d')
1
#赋值给的新对象还是一个set
# 看一个set对象
r.smembers('newvar')

# 求并集 sunion
>>> r.sunion('b','d')
set(['b1', 'b2', 'b3', 'd2', 'd3', 'd1'])

#求并集 并将结果赋给新的集合对象 sunionstore
>>> r.sunionstore('e','b','d')
6
给新集合e
确认
r.smembers('e')
>>> r.smembers('e')
set(['b1', 'b2', 'b3', 'd2', 'd3', 'd1'])

# 求两个集合的不同 sdiff
>>> r.sdiff('s1','s2') #在s1中有,在s2中没有的
set(['t5', 't1'])
>>> r.sdiff('s2','s1') #在s2中有,在s1中没有的
set([])
>>> r.sdiff('s1','s2','s3') # 在s1中有,但在s2和s3中都没有的数
set(['t5', 't1'])

将两和集合的不同赋给新的集合对象 sdiffstore
>>> r.sdiffstore('f','s1','s2')
2
>>> r.smembers('f')
set(['t5', 't1'])

# 取个随机数 srandmember
>>> r.srandmember('s1')
't2'
>>> r.srandmember('s1')
't3'

#从集合中删除元素 r.srem
>>> r.smembers('e')
set(['b1', 'b2', 'b3', 'd2', 'd3', 'd1'])
>>> r.srem('e','b3') #删除一个
1
>>> r.smembers('e')
set(['d3', 'd2', 'b1', 'b2', 'd1']
>>> r.srem('e','b1','b2') #删除多个
2
>>> r.smembers('e')
set(['d2', 'd3', 'd1'])

#整理
向集合添加元素 r.sadd('s','s1')
获取set的元素个数 r.scard('b') 不存在的集合为0
查看整个set的元素 r.smembers('s')
判断set中是否有某个元素 r.sismember('b','b1')
取个随机数 r.srandmember(s)
删除r.srem('s','s1','s2') 从s中删除s1和s2两个元素
求交集 r.sinter('b','d')
求交集并将结果赋值 r.sinterstore('newvar','b','d')
求并集 r.sunion('b','d','f')
求并集 并将结果赋给新的集合对象 r.sunionstore('e','b','d')
两个集合的不同 r.sdiff('s1','s2') #在s1中有,在s2中没有
两个集合的不同赋给新集合 r.sdiffstore('f','s1','s2')

(四)有序集合zset (方法不是很明白)
zadd 添加
zcard 数量
zincr 自加1
zrange 取数据
zrangebyscore 按照积分(范围)取数据
zrem 删除
zscore 取积分

添加
>>> r.zadd('my-key', 'name1', 1.1, 'name2', 2.2, name3=3.3, name4=4.4)
4
数量
>>> r.zcard('my-key')
4
取数据
>> r.zrange('my-key',start=0,end=-1)
['name1', 'name2', 'name3', 'name4']

import time
t1 = time.time()
import redis
r = redis.Redis("localhost")
for i in xrange(1):
a=r.set(i, i)
b=r.get(i)
print b

r.lpush('book','book1')
r.lpush('book','book2')
print 'list llen:',r.llen('book')
print 'list lrange:',r.lrange('book',start=0,end=-1)
print 'list index:',r.lindex('book',1)

r.sadd('xiaoming','song1')
r.sadd('xiaoming','song2')
print 'set scard:',r.scard('xiaoming')
print 'set sismember:',r.sismember('xiaoming','song1')
r.sadd('lily','song1')
print 'sinter:',r.sinter('xiaoming','lily')
print 'set smembers:',r.smembers('xiaoming')

r.zadd(u'zset','xiaoming',2)
r.zadd(u'zset','lily',1)
print 'zrange:',r.zrange('zset',0,-1)
print 'zrangebyscore:',r.zrangebyscore('zset',1,1)

print time.time()-t1

总结:
1)string类型
添加K-V:
r.set('name','jin')
r.append('age',28)
r.getset('name','diege') 存新数据时将上次存储内容同时返回出来
r.incr('age',10) 递增赋值,每执行一次它自加一个步长(可以指定偏移)
r.decr('age',10) 递减赋值,每执行一次它自加一个步长(可以指定偏移)
获取value
r.get('name')
r['name']
同时取一批:r.mget('a1','b1')
删除:
对象delete方法 r.delete('sex')删数据1是删除成功 0和None是没这个东西
del方式 del r['name']

2)list类型
向序列添加数据
r.rpush('a',1) 右添加
r.lpush('a',3) 左添加
r.lpushx(name, value)对象不存在的话,不会添加,返回0
获序列长度 r.llen('b')
取出序列中制定位置的元素 r.lindex('b',2)
查看序列所有元素 r.lrange('a',start=1,end=-1)
修剪序列 r.ltrim('a',start=0,end=2) 得到剩下的,包含end位置的元素。若start 大于end,则将这个序列清空
排序 r.sort('a') #序列是字符串没有成功
从序列中删除元素并返回 r.rpop()
从序列中删除元素 r.lrem(name, value, num) num是删除的个数,num = 0全部删除,num>0时从头到尾的删除,num<0时从尾到头的删除
清空序列:r.ltrim('a',start=1,end=0) 裁剪的特殊用法

3)set类型
向集合添加元素 r.sadd('s','s1')
获取set的元素个数 r.scard('b') 不存在的集合为0
查看整个set的元素 r.smembers('s')
判断set中是否有某个元素 r.sismember('b','b1')
取个随机数 r.srandmember(s)
删除r.srem('s','s1','s2') 从s中删除s1和s2两个元素
求交集 r.sinter('b','d')
求交集并将结果赋值 r.sinterstore('newvar','b','d')
求并集 r.sunion('b','d','f')
求并集 并将结果赋给新的集合对象 r.sunionstore('e','b','d')
两个集合的不同 r.sdiff('s1','s2') #在s1中有,在s2中没有
两个集合的不同赋给新集合 r.sdiffstore('f','s1','s2')

4)zset类型
zadd 添加
zcard 数量
zincr 自加1
zrange 取数据
zrangebyscore 按照积分(范围)取数据
zrem 删除
zscore 取积分

5)通用方法
所有对象:r.keys() 可是通配符 r.keys('a*')
随机获取key:r.randomkey()
对象是否存在:r.exists('a')
对象类型判断:r.type('a')
改名 r.rename('name','uname') 适用于各种类型
设置过期时间 r.expire('uname',10) 适用于各种类型
看剩余过期时间 r.ttl('uname') 适用于各种类型 不存在或者没有设置过期时间是没有任何返回的

python模块整理29-redis模块的更多相关文章

  1. pycharm中使用redis模块入门

    数据缓存系统:1:mongodb:是直接持久化,直接存储于硬盘的缓存系统2:redis: 半持久化,存储于内存和硬盘3:memcache:数据只能存储在内存里的缓存系统 redis是一个key-val ...

  2. python基础整理4——面向对象装饰器惰性器及高级模块

    面向对象编程 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象编程(Object Oriented Pro ...

  3. python redis模块的常见的几个类 Redis 、StricRedis和ConnectionPool

    日常写代码过程中,经常需要连接redis进行操作.下面我就介绍下python操作redis模块redis中的几个常见类,包括redis连接池. 一.StrictRedis 类 请看代码:. #!/us ...

  4. Python 常用系统模块整理

    Python中的常用的系统模块中部分函数等的整理 random: 随机数 sys: 系统相关 os: 系统相关的 subprocess: 执行新的进程 multiprocessing: 进程相关 th ...

  5. python redis模块详解

    前言  现在越来越觉得知识的沉淀尤为重要,最近打算慢慢的把一些知识点做个记录,如果长期不用生疏了也可以快速回顾.下面我会依次介绍在python中常用组件redis,rabbitmq,mongodb,E ...

  6. Python 连接 redis 模块

    redis 模块使用可以分类为: 连接方式 连接池 操作 String操作 Hash操作 List操作 Set操作 Sort Set操作 管道 发布订阅 (1)操作模式 redis提供两个类Redis ...

  7. python之redis模块

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

  8. python学习之-- redis模块管道/订阅发布

    redis 模块操作剩余其他常用操作 delete(*names):删除任意的数据类型exists(name):检测redis的name是否存在keys(pattern='*'):根据模型获取redi ...

  9. python学习之-- redis模块操作 集合和有序集合

    redis 模块操作之 集合set和有序集合zset Set 集合操作,不允许重复的列表sadd(name,value):name对应的集合中添加元素scard(name):获取name对应的集合中元 ...

随机推荐

  1. linux下route命令--说的比较清楚!

    linux下route命令     route命令感觉很不容易.一般开机后在命令行中使用route命令,会得到下面的信息   Kernel IP routing table   Destination ...

  2. 苹果笔记本MacBookPro 的新手使用技巧

    Mac 系统的桌面 Mac 的桌面是一个很炫的3D, 背景是一张“星空”图 Dock:  在桌面的下方,有一排图标, 这个叫Dock, 用来快速启动程序, 进入文件夹, 它同时还可以停靠正在运行的程序 ...

  3. android 动态改变控件位置和大小 .

    动态改变控件位置的方法: setPadding()的方法更改布局位置. 如我要把Imageview下移200px:             ImageView.setPadding( ImageVie ...

  4. 如何优雅地使用vim编辑器

    如何优雅地使用vim编辑器大赞..原文链接:http://jackiekuo.com/code/2014/05/07/use-vim-the-pragmatic-way/ 接上篇如何优雅地使用Vim? ...

  5. windows下安装多个mysql

    1.正常安装mysql5.1.33 安装服务名为mysql3306 安装目录d:\mysql5.1\3306 安装完成后,关闭服务 ① 复制安装文件 将默认安装目录C:\Documents and S ...

  6. ISSCC 2017论文导读 Session 14 Deep Learning Processors,A 2.9TOPS/W Deep Convolutional Neural Network

    最近ISSCC2017大会刚刚举行,看了关于Deep Learning处理器的Session 14,有一些不错的东西,在这里记录一下. A 2.9TOPS/W Deep Convolutional N ...

  7. 反片语(UVa156)

    题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=835&a ...

  8. 利用nodeJs anywhere搭建本地服务器环境【转载】

    首先去nodeJs官网下载最新版nodeJs     https://nodejs.org/en/ 安装成功后win+r打开cmd 输入node -help 或者node -v查看是否安装成功 装好后 ...

  9. Vugen 和controller 中的run-time setting区别

    Vugen 和controller 中的run-time setting有什么不同?

  10. spring_150909_hibernate_id_table

    1.新建java工程:spring_150909_hibernate_id_table,如下图所示: 2.建DogPet实体类: package com.spring.model; import ja ...