Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念。
Redis默认支持16个数据库(可以通过配置文件支持更多,无上限),可以通过配置databases来修改这一数字。
Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。
数据结构
String : key最大是512K,键最大是512M。建议每个key不要超过M级别
Hash
List
Set
ZSet
HyperLogLog:基数计算(cardinality counting)指的是统计一批数据中的不重复元素的个数
Geo
Pub/Sub
Redis Module:BloomFilter,CuckooFilter,RedisSearch
Redis大Key
存储本身的key值空间太大,或者hash,list,set等存储中value值过多。
如何保证redis中的数据都是热点数据:redis内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。
Redisson是一个高级的分布式协调Redis客服端。
Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持。
Redis并不能保证数据的强一致性,这意味这在实际中集群在特定的条件下可能会丢失写操作。
Redis集群之间是异步复制。
Redis集群最大节点个数是16384。
Redis集群目前无法做数据库选择,默认在0数据库。
ping测试Redis的连通性。
redis中的管道:一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应。这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复。
Redis事务相关的命令:MULTI、EXEC、DISCARD、WATCH
过期时间:EXPIRE
永久有效:PERSIST
内存优化:尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面。
Redis回收使用的是LRU算法
Redis2.6开始redis-cli支持一种新的被称之为pipe mode的新模式用于执行大量数据插入工作。
Redis Cluster实现了一种混合形式的查询路由,但并不是直接将请求从一个redis节点转发到另一个redis节点,而是在客户端的帮助下直接redirected到正确的redis节点。
Redis是单线程的,可以在同一个服务器部署多个Redis的实例,并把他们当作不同的服务器来使用。
Redis的存储极限是系统中的可用内存值
Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
尽量避免在压力很大的主库上增加从库
主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3...