Redis client获取全量接口优化

683 阅读1分钟

解析dump的二进制流

获取全量集合的命令 O(N)

  • hgetall
  • lrange(0,-1)
  • smembers
  • zrange(0,-1)

目前获取全量的方法

  • 存一份全量在memcache中
  • 单独一个field存全量的序列化:占用内存多

改进的方法:dump之后在客户端解析

  • dump命令 O(1)
  • 解析过程从redis的单线程,转为客户端的多线程处理,充分利用了client的cpu资源
  • 服务端压力降低

Redis数据类型

1. hash的两种实现

  • ziplist(所有kv长度小于64字节,且kv数量小于512时才使用):

    • 保证在hashtable刚创建以及元素较少时,用更少的内存来存储,同时对查询的效率也不会受太大的影响
  • dict

2. sorted set的实现

  • ziplist

  • dict+ skiplist

3. list的实现

  • list

  • quicklist

4. set的实现

  • intset(数字,64bit,个数小于set-max-intset-entries 默认512)

    • 当set中添加的元素都是整形且元素数目较少时,节省内存
  • dict