我已经在本地计算机上完成了简单的性能测试,这是python脚本:
import redis import sqlite3 import time data = {} N = 100000 for i in xrange(N): key = "key-"+str(i) value = "value-"+str(i) data[key] = value r = redis.Redis("localhost", db=1) s = sqlite3.connect("testDB") cs = s.cursor() try: cs.execute("CREATE TABLE testTable(key VARCHAR(256), value TEXT)") except Exception as excp: print str(excp) cs.execute("DROP TABLE testTable") cs.execute("CREATE TABLE testTable(key VARCHAR(256), value TEXT)") print "[---Testing SQLITE---]" sts = time.time() for key in data: cs.execute("INSERT INTO testTable VALUES(?,?)", (key, data[key])) #s.commit() s.commit() ste = time.time() print "[Total time of sql: %s]"%str(ste-sts) print "[---Testing REDIS---]" rts = time.time() r.flushdb()# for empty db for key in data: r.set(key, data[key]) rte = time.time() print "[Total time of redis: %s]"%str(rte-rts)
我期望redis的执行速度更快,但是结果表明它的速度要慢得多:
[---Testing SQLITE---] [Total time of sql: 0.615846157074] [---Testing REDIS---] [Total time of redis: 10.9668009281]
那么,redis是基于内存的,那么sqlite呢?为什么redis这么慢?什么时候需要使用Redis和什么时候需要使用sqlite?
从redis文档中
Redis是一台服务器:所有命令都涉及网络或IPC往返。将其与嵌入式数据存储(例如SQLite,Berkeley DB,Tokyo / Kyoto Cabinet等)进行比较是没有意义的,因为大多数操作的成本恰好由网络/协议管理决定。
尽管在某些情况下这是对速度问题的承认,但这确实是有道理的。例如,在并行访问的倍数下,Redis的性能可能比sqlite好得多。
用于正确工作的正确工具 ,有时是Redis,有时是Redite,有时则是完全不同的东西。如果此速度测试正确显示了您的应用程序将实际执行的操作,则sqlite将为您提供更好的服务,并且您达到了此基准也很好。