简单介绍redis
简单来说 Redis 就是⼀个使用 C语⾔开发的数据库,不过与传统数据库不同的是 Redis 的数据
是存在内存中的 ,也就是它是一个支持持久化的内存数据库,所以读写速度⾮常快,因此 Redis 被⼴泛应⽤于缓存
⽅向。
Redis 除了做缓存之外,也经常⽤来做分布式锁,甚⾄是消息队列。
另外Redis提供了多种数据类型来⽀持不同的业务场景。Redis 还⽀持事务 、持久化、Lua 脚本、多
种集群⽅案等。
Redis持久化机制
Redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持
久化。当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。
实现:单独创建fork()一个子进程,将当前父进程的数据库数据复制到子进程的内存中,然后由子进程写入到临时文件中,持久化的过程结束了,再用这个临时文件替换上次的快照文件,然后子进程退出,内存释放。
RDB是Redis默认的持久化方式。按照一定的时间周期策略把内存的数据以快照的形式保存到硬盘的二进制文件。即Snapshot快照存储,对应产生的数据文件为dump.rdb,通过配置文件中的save参数来定义快照的周期。( 快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。)
AOF:Redis会将每一个收到的写命令都通过Write函数追加到文件最后,类似于MySQL的binlog。当
Redis重启是会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。
分布式缓存常见的技术选型方案案有哪些
分布式缓存的话,使⽤的比较多的主要是 Memcached 和 Redis。不过,现在基本没有看过还有
项⽬使⽤ Memcached 来做缓存,都是直接⽤ Redis。
Memcached 是分布式缓存最开始兴起的那会,比较常⽤的。后来,随着 Redis 的发展,⼤家慢
慢都使⽤更加强⼤的 Redis 了。
**分布式缓存主要解决的是单机缓存的容量受服务器限制并且⽆法保存通用的信息。**因为,本地缓
存只在当前服务里有效比如如果你部署了两个相同的服务,他们两者之间的缓存数据是⽆法共
同的
Redis 和 Memcached 的共同点
现在公司⼀般都是⽤ Redis 来实现缓存,⽽且 Redis ⾃身也越来越强⼤了!不过,了解 Redis 和
Memcached 的区别和共同点,有助于我们在做相应的技术选型的时候,能够做到有理有据!
- 都是基于内存的数据库,⼀般都⽤来当做缓存使⽤。
- 都有过期策略。
- 两者的性能都⾮常⾼。
Memcache与Redis的区别
- Redis ⽀持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进
⾏使⽤, Memecache 把数据全部存在内存之中。 - Redis ⽀持更丰富的数据类型(⽀持更复杂的应⽤场景)。Redis 不仅仅⽀持简单的 k/v 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。Memcached 只⽀持最简单的 k/v 数据类型
- Redis 有灾难恢复机制。 因为可以把缓存中的数据持久化到磁盘上。
- Redis 在服务器内存使⽤完之后,可以将不⽤的数据放到磁盘上。但是,Memcached 在服务器内存使⽤完之后,就会直接报异常
- Memcached 没有原⽣的集群模式,需要依靠客户端来实现往集群中分⽚写⼊数据;但是Redis ⽬前是原⽣⽀持 cluster 模式的
- Memcached 是多线程,⾮阻塞 IO 复⽤的⽹络模型;Redis 使⽤单线程的多路 IO 复⽤模型。 (Redis 6.0 引⼊了多线程 IO )
- Redis ⽀持发布订阅模型、Lua 脚本、事务等功能,而emcached 不⽀持。并且,Redis⽀持更多的编程语⾔。
- Memcached过期数据的删除策略只⽤了惰性删除,⽽ Redis 同时使⽤了惰性删除与定期删除。
- 使用底层模型不同 它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。 Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
- Redis支持数据的备份,即master-slave模式的数据备份。
- value 值大小不同:Redis 最大可以达到 1gb;memcache 只有 1mb。