etcd和redis都可以作为k-v存储。那么他们各有什么特点呢,下面将介绍两者的对比。
etcd主要用于k8s的服务发现。
利用 raft 算法做分布式一致性,强调各个节点之间的通信、同步,确保各节点数据和事务的一致性,使得服务发现工作更稳定。
etcd v3 的底层采用 boltdb 做存储,value 直接持久化。
etcd v3 只能通过 gRPC 访问。
etcd 是用 go 开发的,和 k8s 在同一个生态下。
redis主要用于数据库缓存。
redis 也可以做主从同步和读写分离,但节点一致性强调的是数据,不是事务。redis 的注册和发现只能通过 pub(发布) 和 sub (订阅)实现,安全性不能保证(断线重连之后不会将历史信息推送给客户端,需要自己做一个定时轮询),延时也比 etcd v3 高。
redis 是一个内存数据库,它的持久化方案有 aof 和 rdb,在宕机时都或多或少会丢失数据。
redis 可以通过 http 访问。
redis 的性能比 etcd 强,qps甚至可以达到10万+。
redis的value 支持多种数据类型,包括String ,Set,List,Hash,Zset。