设为首页 收藏本站
查看: 1268|回复: 0

[经验分享] python模块整理29-redis模块

[复制链接]

尚未签到

发表于 2015-7-22 08:35:12 | 显示全部楼层 |阅读模式
  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>> 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>> 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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-89246-1-1.html 上篇帖子: redis服务端基本命令 下篇帖子: Java通过jedis操作redis(增删改查)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表