redis性能提升
1.redis请求执行原理
redis客户端与redis服务器之间使用TCP协议进行连接,一个科幻可以通过一个socket连接发送多个请求命令,
但每个请求命令发出后client通常会阻塞并等待redis服务器处理,redis服务器处理完毕后会将结果通过响应报文返回给client,因此当执行多条命令的时候都需要等待上一条命令执行完毕后才能执行。
2.合并请求
每次向redis服务器执行请求,都是一次TCP round trip,
因此将请求合并,作为一次请求,可以很好的提升性能。
示例如下:
import redis cache = redis.Redis('127.0.0.1', 6379, db=3, password='test', decode_responses=True ) cache.delete('test_set') for i in range(10): cache.sadd('test_set',i) print(cache.sinter('test_set'))
运行结果:
import redis cache = redis.Redis('127.0.0.1', 6379, db=3, password='test', decode_responses=True ) values = [0,1,2,3,4,5,6,7,8,9] cache.delete('test_set') cache.sadd('test_set',*values) print(cache.sinter('test_set'))
运行结果:
3.批量处理
每次向redis服务器发送请求,最后发送批量执行命令,redis服务器执行完毕,返回响应。
当不能合并请求时,如每次sadd的key值不同,可使用批量处理的方式,提升性能。
示例如下:
import redis cache = redis.Redis('127.0.0.1', 6379, db=3, password='test', decode_responses=True ) for i in range(10): cache.delete('test_set_'+str(i)) for i in range(10): cache.sadd('test_set_'+str(i),i) for i in range(10): print(cache.sinter('test_set_'+str(i)))
运行结果:
import redis cache = redis.Redis('120.26.217.149', 6379, db=3, password='51yunchedevredis', decode_responses=True ) pipeline = cache.pipeline() for i in range(10): pipeline.delete('test_set_'+str(i)) for i in range(10): pipeline.sadd('test_set_'+str(i),i) pipeline.execute() for i in range(10): print(cache.sinter('test_set_'+str(i)))
运行结果: