Redis
1. 什么是redis
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它是内存中的数据结构存储系统,可以用来作为数据库(非关系型数据库)、缓存(可以有效的降低用户访问物理设备的频次,有效的减少并发的压力,从而保护后端真实的服务器)和消息中间件(主要作用是为了实现数据的平滑过渡,让程序调用更加流畅)。它支持多种类型的数据结构:字符串(String),哈希(Hash),列表(list),集合(sets) 和有序集合(sorted sets)。
Redis内置了复制(replication),LUA脚本(Lua scripting),LRU驱动事件(LUR eviction),事务(transactions)和不同级别的磁盘持久化(persistence),并通过Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high avaliability)。
2. Redis分片
2.1 什么是Redis分片
Redis分片就是:准备多台redis,共同为用户提供缓存服务.在保证效率的前提下,实现了内存的扩容。用户在使用分片机制时,将多台redis当做1台使用。
2.2 搭建Redis分片环境
- 在redis目录下新建一个名为shards的文件夹
- 复制3份redis.conf配置文件并命名为6379.conf、6380.conf、6381.conf
- 进入6380.conf配置文件里修改端口号(6381.conf里的端口号改成6381)
- 启动三台redis
- 查看启动情况
2.3 分片的不足
- 分区是多台redis共同作用的,如果其中一台出现了宕机现象,则整个分片都将不能使用,虽然是在一定程度上缓减了内存的压力,但是没有实现高可用。
- 涉及多个key的操作通常是不被支持的。举例来说,当两个set映射到不同的redis实例上时,你就不能对这两个set执行交集操作。
- 涉及多个key的redis事务不能使用。
- 当使用分区时,数据处理较为复杂,比如你需要处理多个rdb/aof文件,并且从多个实例和主机备份持久化文件。
高可用