【原创】 linux-python-redis…

linux-python-redis(NOSQL)简单操作

原创所有,转载请注明本文超链接地址以及作者,谢谢! http://blog.sina.com.cn/s/blog_83dc494d0101c6lc.html
又接触了一个新东西哈,redis数据库,貌似听说就是NOSQL,这种数据库的特点就是只有两列,key/values (列名,数据),说一般微博之类的都用这个存储数据的。废话不说,看步骤。
首先下载redis数据库
1. -- >wget  http://download.redis.io/releases/redis-2.6.16.tar.gz #或者到网站下载http://redis.io
2. -- > tar -zxvf redis-2.6.16 #解压
3. -- > cd redis-2.6.16 
4. -- > make #编译
5. -- > make install
6. -- > cd untils
7. -- > ./install_server
8. -- > redis-server #运行redis数据库

下载python对redis数据库的支持 redis-py
下载后进入redis-py文件夹内
2   -->cd   redis-py/trunk/   #进入配置文件夹内
3   -->sudo python setup.py install #配置redis-py,
4   -->rm -rf redis-py #返回到redis-py所在文件夹,删除掉即可(第三步已经把redis-py所需要的库配置到了python所在的目录)

mkdir /home/zhangzhipeng/py/redis_test #创建一个写程序的目录(自由支配)
cd /home/zhangzhipeng/py/redis_test
vi redis_test.py
---------------------------------------------------------------------
#!/usr/bin/python
#!coding:utf-8
import redis #导入redis-py模块
class redis_db:
  def __init__(self):
    self.host = 'localhost' #主机,本机为localhost
    self.port = 6379 #段口号,默认为6379
  def read(self,key):
    rd = redis.StrictRedis(host=self.host,port=self.port)#链接到服务器
    value = rd.get(key)#用get方法获取key所对应的value
    print value #打印结果
    return value
  def write(self.key,value):
    wd = redis.StrictRedis(host=self.host,port=self.port)#链接到服务器
    wd.set(key,value)#用set方法将对应的key,value添加到数据库中
if __name__ =='__main__':
  db = new redis_db() #new一个类
  key = 'apple_price_2013_10_20'
  value = '3.4'
  db.write(key,value)
  db.read(key)
---------------------------------------------------------------------
ESC --> : --> wq -->Enter
python redis_test.py
======================================
下面再看一下对大数据,大量的数据进行读写的操作。
vi redis_more_test.py
----------------------------------------------------------------------
#!/usr/bin/python
#!coding:utf-8

import redis
class redis_db:
  def __init__(self):
    self.host = 'localhost' #主机,本机为localhost
    self.port = 6379 #段口号,默认为6379 
  def read_more(self,keys):
    """keys 是列表类型
    """
    rd = redis.StrictRedis(host=self.host,port=self.port)#链接到服务器
    values = rd.mget(keys)#用get方法获取key所对应的value
    print values #打印结果
    return value
  def write_more(self,values):
    """data 是字典类型
    """
    wd = redis.StrictRedis(host=self.host,port=self.port)#链接到服务器
    wd.mset(values)#用set方法将对应的key,value添加到数据库中

def test():
  """this is a test.
  """
  keys = []
  values ={}
  for i in range(10):
    key = 'apple_price_'+str(i)
    keys.append(key)
    values[key] =   str(i)
  db = new redis_db()
  db.mset(values)
  db.mget(keys)    
if __name__ =='__main__':
  test()
---------------------------------------------------------------------
ESC --> : --> wq -->Enter
python redis_test.py
======================================
当然,有的人会问单条for循环存储和for循环后批量存储区别在哪?区别很大,假如你有1W数据,可以分别测试一下存取1W条数据的时间。1W条的批量处理,时间为1.5s以下,而单条存储的时候上10s也不足为怪。
下面我直接把握的代码放上来,供大家借鉴学习(其实我也是照搬的```~~),而且我把keys和values写到__init__函数块中了当时主要是脑子抽筋了,反正用来练习的。
-------------------------------------------------------------------
#!/usr/bin/python
import redis #导入redis 模块
import datetime #时间模块

class redis_data():
  def __init__(self):
    self.host='localhost'#主机
    self.port=6379 #端口
    self.key = None #key值
    self.value = None value值
    self.keys=[]#keys列表
    self.values={}#values字典,{key:value,key:value}
##################单条操作###################
  def read(self,key):
    rd = redis.StrictRedis(host=self.host, port=self.port)
    value = rd.get(key)
    return value
  def write(self,key,value):
    wd = redis.StrictRedis(host=self.host, port=self.port)
    wd.set(key,value)
    return
##################批量操作###################
  def add_key(self,key):
    self.keys.append(key)
  def read_more(self):
    rd = redis.StrictRedis(host=self.host, port=self.port)
    values = rd.mget(self.keys)

  def add_values(self,key,value):
    self.values[key]=value
  def write_more(self):
    wd = redis.StrictRedis(host=self.host, port=self.port)
    wd.mset(self.values)
####################测试用例##################
#------------       test   ----------------
def test_0(data): #单条读写--用来测试能否对数据库进行读写
  data.write('meituan','88008')
  rd = data.read('meituan')

def test_2(data):#批量读写--测试对比时间
  for i in range(10000): #将keys和values设置好
    data.add_values('meituan'+str(i),str(i+1))
    data.keys.append('meituan'+str(i))

  print'-'*15,'more write','-'*15 #批量写1W条数据
  start_time = datetime.datetime.now() #开始时间
  data.write_more()
  end_time = datetime.datetime.now() #结束时间
  print 'more write time:',end_time-start_time#批量写1W,用时

  print'-'*15,'more read','-'*15#批量读1W数据
  start_time = datetime.datetime.now()
  data.read_more()
  end_time = datetime.datetime.now()
  print 'more read time:',end_time-start_time #批量读1W,用时

  print '-'*15,'read one more','-'*15#单条读1W数据
  start_time = datetime.datetime.now()
  for i in data.keys:
    data.read('meituan'+str(i))
  end_time = datetime.datetime.now()
  print 'read one more time:',end_time - start_time#单条读1W,用时

  print '-'*15,'write one more','-'*15#单条写1W数据
  start_time = datetime.datetime.now()
  for i in range(10000):
    data.write('dazhong'+str(i),str(i+1))
  end_time = datetime.datetime.now()
  print 'write one more time:',end_time - start_time#单条写1W,用时
#-----------     test end -----------
if __name__ == "__main__":
  data = database()
  test_2(data)
------------------------------------------------------------------------------------
看看效果
【原创】 <wbr>linux-python-redis(NOSQL)简单操作
同样是1W条数据
get     -->5.088s
mget -->0.109s
------
set     -->5.141s
mset -->0.043s
可见差距之大,所以尽量存储一段时间或者一定数量后再进行读写。
好了redis数据库基础操作结束。

原创所有,转载请注明本文超链接地址以及作者,谢谢! http://blog.sina.com.cn/s/blog_83dc494d0101c6lc.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值