
Redis提供了五种核心数据类型,包括string、hash、list、set以及sorted set。
在Redis内部,所有的key和value都是通过一个redisObject对象来代表的。这个redisObject包含了关于数据类型和存储方式的重要信息。具体来说,type代表value的数据类型,而encoding则表示不同类型数据在Redis内部的存储形式。
对于string类型,其最大上限为1G字节。常用的操作包括set、get、decr、incr以及mget等。
Hash类型是一个field和value的映射表,可以理解为一种string类型的field对应一个value的结构。常用的操作有hget、hset以及hgetall等。
List类型是一个链表结构,每个子元素都是string类型。其操作包括push、pop以及获取一个范围的所有值等。
Set类型是无序集合,可以包含多达(2的32次方-1)个元素。操作包括sadd、spop、smembers以及sunion等。
Sorted set则是有序集合,它在set的基础上增加了顺序属性。相关的操作有zadd、zrange、zrem以及zcard等。
接下来,我们谈谈Redis的持久化机制。主要有两种持久化方式:快照方式和日志追加方式。
快照方式是将内存中的数据以快照的形式写入二进制文件中,默认文件名为dump.rdb。需要注意的是,这种方式是全量保存,可能会引起大量的IO操作,影响性能。
日志追加方式则是Redis收到写命令后,通过write函数追加到日志文件中。配置文件可以调整fsync函数的写入磁盘方式。对于写入过程中前99次可能无效的情况,可以使用bgrewriteaof命令以快照的形式保存到临时文件,最后替换持久化日志。
Redis还使用了虚拟内存技术。这是为了提高单台服务器的性能,将不经常访问的数据交换到虚拟内存中。虚拟内存的配置包括开启虚拟内存功能、设置交换文件路径、设置Redis使用的最大内存上限等。
主从复制是Redis的一项重要功能,它可以提高读取性能,实现读写分离、数据备份和灾难恢复等。主要特点是master可以有多个slave,主从复制不会阻塞master,且可以在master上禁用持久化,由slave进行持久化。主从复制的过程是slave发送sync命令给master,master将数据保存在文件中并发送给slave,然后slave将数据加载到内存中,并接收master的读写命令。据官方数据,slave可以在21秒内完成对Amazon网站10G key set的复制。
关于Redis的客户端,Java客户端推荐使用Jedis,可以通过访问其GitHub页面了解更多信息。
