python操作redis简单例子

#2、配置  配置一下吧,默认配置文件在: “/etc/redis/redis.conf”  绑定ip:  “bind 127.0.0.1″ -> “bind 10.0.1.7″

将磁盘同步改为 不同步或每秒同步,一直同步的话太慢了:  “appendfsync always” -> “appendfsync no”

检查一下后台执行是否打开:  “daemonize yes”

或者其他你想设置的,例如:  连接超时时间 : “timeout 300″  运行级别: “loglevel notice” (个人认为默认的这个就挺好,非出现大异常,不用改为debug )

#3、使用

#! /usr/bin/env python  #coding=utf-8  import redis  print redis.__file__  # 连接,可选不同数据库  r = redis.Redis(host='10.0.1.7', port=6379, db=1)

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

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

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

# 选数据库  #r.select(2)

# 移动数据去2数据库  #r.move('a',2)

# 其他  #r.save('a') # 存数据  #r.lastsave('a') # 取最后一次save时间  #r.flush()  #刷新  #r.shutdown() #关闭所有客户端,停掉所有服务,退出服务器  #  #--------------------------------------------  # 它有四种类型: string(key,value)、list(序列)、set(集合)、zset(有序集合,多了一个顺序属性)  # 不知道你用的哪种类型?  # print r.get_type('a') #可以告诉你  # -------------------------------------------  # string操作  print '-'*20  # 塞数据  r['c1'] = 'bar'  #或者  r.set('c2','bar')  #这里有个 getset属性,如果为True 可以在存新数据时将上次存储内容同时搞出来  print 'getset:',r.getset('c2','jj')  #如果你想设置一个递增的整数 每执行一次它自加1:  print 'incr:',r.incr('a')  #如果你想设置一个递减的整数 please:  print 'decr:',r.decr('a')

# 取数据  print 'r['']:',r['c1']  #或者  print 'get:',r.get('a')  #或者 同时取一批  print 'mget:',r.mget('c1','c2')  #或者 同时取一批 它们的名字(key)很像 而恰好你又不想输全部  print 'keys:',r.keys('c*')  #又或者 你只想随机取一个:  print 'randomkey:',r.randomkey()

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

# 删数据 1是删除成功 0和None是没这个东西  print 'delete:',r.delete('cc')  # 哦对了 它是支持批量操作的  print 'delete:',r.delete('c1','c2')

# 其他  r.rename('a','c3') #呃.改名  r.expire('c3',10) #让数据10秒后过期 说实话我不太明白么意思  r.ttl('c3') #看剩余过期时间 不存在返回-1

#--------------------------------  # 序列(list)操作  print '-'*20  # 它是两头通的  # 塞入  r.push('b','gg')  r.push('b','hh')  # head 属性控制是不是从另一头塞  r.push('b','ee',head=True)  # 看长度  print 'list len:',r.llen('b')  # 列出一批出来  print 'list lrange:',r.lrange('b',start=0,end=-1)

# 取出一位  print 'list index 0:',r.lindex('b',0)

# 修剪列表  #若start 大于end,则将这个list清空  print 'list ltrim :',r.ltrim('b',start=0,end=3) #只留 从0到3四位

# 排序  # 这可是个大工程

#--------------------------------  # 集合(set)操作  # 塞数据  r.sadd('s', 'a')

# 判断一个set长度为多少 不存在为0  r.scard('s')

# 判断set中一个对象是否存在  r.sismember('s','a')

# 求交集  r.sadd('s2','a')  r.sinter('s1','s2')

#求交集并将结果赋值  r.sinterstore('s3','s1','s2')

# 看一个set对象  r.smembers('s3')

# 求并集  r.sunion('s1','s2')  # 阿 我想聪明的你已经猜到了  #求并集 并将结果返回  r.sunionstore('ss','s1','s2','s3')

# 求不同  # 在s1中有,但在s2和s3中都没有的数  r.sdiff('s1','s2','s3')  r.sdiffstore('s4','s1','s2')# 这个你懂的

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

#-------------------------------------  #zset 有序set  #'zadd', 'zcard', 'zincr', 'zrange', 'zrangebyscore', 'zrem', 'zscore'  # 分别对应  #添加, 数量, 自加1,取数据,按照积分(范围)取数据,删除,取积分

# 我靠 你玩死我了 redis!  # 今天在实验中,我尝试插入一条zset类型数据:  r1.zset(u'www.liyi99.com','liwu',3)  # 插入成功  # 我继续插入  r1.zset(u'www.liyi99,com',u'\u9001\u793c',5)  #报错:  #UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)  #这次插入的是礼物的中文词 unicode编码  #为什么会失败那,这条数据是我从redis里面取出来然后没做任何修改再插入的阿  #redis返回和接受的数据类型都是unicode编码的阿  #好吧,我们再次插入试试  #再次插入  r1.zset('www.liyi99.com',u'\u9001\u793c',5)  #成功了  #插入  r1.zset('www.liyi99.com','礼物',5)  #依然成功,跟入redis.py 1024行  return self.send_command('ZADD %s %s %s\r\n%s\r\n' % (      key, score, len(member), member))  # 哦 万恶的编码转换!  #不过取的时候,不论第一个是何种类型的数据都无关系 文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/3_program/python/20110510/555370.html

http://blog.csdn.net/chenggong2dm/article/details/6102540

运行

   打开Python解释器:

>>> import redis >>> r = redis.Redis(host='localhost', port=6379, db=0)   #如果设置了密码,就加上password=密码 >>> r.set('foo', 'bar')   #或者写成 r['foo'] = 'bar' True >>> r.get('foo')    'bar' >>> r.delete('foo') True >>> r.dbsize()   #库里有多少key,多少条数据 0 >>> r['test']='OK!'

>>> r.save()   #强行把数据库保存到硬盘。保存时阻塞 True

--------------------------------

>>> r.flushdb()   #删除当前数据库的所有数据 True

 >>> a = r.get('chang') >>> a    # 因为是Noen对象,什么也不显示! >>> dir(a)    ['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

>>> r.exists('chang')  #看是否存在这个键值 False

>>> r.keys()   # 列出所有键值。(这时候已经存了4个了) ['aaa', 'test', 'bbb', 'key1']

附注A:

来看一下redis.Redis的 init() 函数定义:

 __init__(self, host='localhost', port=6379, db=0, password=None, socket_timeout=None, connection_pool=None, charset='utf- 8', errors='strict', decode_responses=False, unix_socket_path=None)

最新的redis 2.6.0加入了连接池,具体用法可以看作者博客。

 附注B:

其他命令API,请参照redis-Python作者的博客,写的挺清楚了:

https://github.com/andymccurdy/redis-py

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏奇点大数据

你想要的Python面试都在这里了【315+道题】

再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?

1832
来自专栏玄魂工作室

看代码学安全(8 )preg_replace函数之命令执行

--------------------------------------------------------------------------------...

2123
来自专栏精讲JAVA

Java 虚拟机 2 : Java 内存区域及对象

为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念。

1182
来自专栏Linyb极客之路

Java虚拟机:Java内存区域及对象

为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念。

1242
来自专栏我和未来有约会

读书笔记(二)对象激活和上下文

任何程序都需要在某个平台提供的环境中执行.对于传统的炒作系统而言,这种运行时环境的主要形式就是一个进程.一个进程不仅为你的代码提供了象虚拟内存,线程和内核对象这...

1957
来自专栏pangguoming

Python相对、绝对导入浅析

这篇文章从另外一个不同的视角来分析一下Python的import机制,主要的目的是为了搞懂import中absolute、relative import遇到的几...

4217
来自专栏张戈的专栏

Linux:sed命令详解

1. 简介 sed 是非交互式的编辑器。它不会修改文件,除非使用 shell 重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。 ? sed 编辑器逐...

4696
来自专栏cs

c++那些事儿7.0 I/O流,文件操作

知识点综述: ---- C++ I/O: 在iostream头文件中定义 istream //通用输入流和其它输入流基类。 ...

3537
来自专栏大内老A

通过自定义ServiceHost实现对WCF的扩展[原理篇]

除了采用自定义特性声明(服务行为、契约行为和操作行为)或者配置的方式(服务行为和终结点行为)应用自定义的行为之外,我们还可以通过自定义ServiceHost来应...

1956
来自专栏互扯程序

java中的内存模型

现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。

1634

扫码关注云+社区

领取腾讯云代金券