【原创】 linux-python-redis…

来源:互联网 发布:陕钢集团网络大学 编辑:程序博客网 时间:2024/06/14 00:17
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
1. -- >svn checkout https://github.com/andymccurdy/redis-py
下载后进入redis-py文件夹内
2  -->cd redis-py/trunk/  #进入配置文件夹内
3  -->sudo python setup.pyinstall #配置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
classredis_db:
  def__init__(self):
   self.host = 'localhost'#主机,本机为localhost
   self.port = 6379#段口号,默认为6379 
  defread_more(self,keys):
    """keys 是列表类型
    """
   rd =redis.StrictRedis(host=self.host,port=self.port)#链接到服务器
   values =rd.mget(keys)#用get方法获取key所对应的value
   print values #打印结果
   return value
  defwrite_more(self,values):
   """data 是字典类型
   """
   wd =redis.StrictRedis(host=self.host,port=self.port)#链接到服务器
   wd.mset(values)#用set方法将对应的key,value添加到数据库中

def test():
  """this is atest.
  """
  keys = []
  values ={}
  for i inrange(10):
   key = 'apple_price_'+str(i)
   keys.append(key)
   values[key] =  str(i)
  db = newredis_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 = Nonevalue值
   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 writetime:',end_time-start_time#批量写1W,用时

  print'-'*15,'moreread','-'*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 onemore','-'*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 onemore','-'*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
原创粉丝点击