Redis是一种基于键值对(key-value)的 NoSQL 数据库。
与很多键值对数据库不同的是,Redis中的值不仅可以是字符串,而且还可以是具体的数据结构,它主要提供了5种数据结构:字符串、哈希、列表、集合、有序集合。这样不仅能便于在许多应用场景的开发,同时也能够提高开发效率。
通常看,将数据放在内存中是不安全的,一旦发生断电或者机器故障,重要的数据可能就会丢失,因此 Redis 提供了两种持久化方式:RDB 和 AOF,即可以用两种策略将内存的数据保存到硬盘中,这样就保证了数据的可持久性。
Redis 提供了复制功能,实现了多个相同数据的 Redis 副本
Redis 从 2.8 版本提供了高可用实现 Redis Sentinel(哨兵模式),它能够保证 Redis 节点的故障发现和故障自动转移。
Redis 从 3.0 版本提供了分布式实现 Redis Cluster(集群模式),它是 Redis 真正的分布式实现,提供了高可用、读写和容量的扩展性。
缓存的两种形式:
页面缓存:第一次从数据库中读取,然后生成一个静态页面,以后所有的读取,只加载这个静态页面就可以了
数据缓存:由于一个页面有几种需要从不同的缓存中读取数据的模块,所以不适合使用页面缓存。
为了提高用户的请求速度和降低服务器的负载,降低数据库的读写次数,将一些在短时间之内不会发生变化且被频繁访问热点数据,存放就到缓存中,其性能优于 Memcached。 (类似于 MyBatis 的缓存机制)
热点数据:数据库中数据被访问的频率是不均匀的,频繁被访问的数据称为热点数据((Hot Spot Data)
Redis 提供了列表和有序集合数据结构,合理地使用这些数据结构可以很方便地构建各种排行榜系统。
利用 Redis 的原子性,可以轻松地使用 Redis INCR(自增) 和 DECR(自减) 命令来构建计数系统,关键是不用担心数据库的并发性问题,一般用于网站访问统计
利用 Redis 支持的过期时间特性,可以定时清除过期数据,如定期活动(精确到毫秒)
消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、非实时业务削峰等特性。
Redis 提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足,如秒杀、抢购、12306 等。
赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功能,由于社交网站访问量通常比较大,而且传统的关系型数据不太适合保存这种类型的数据,Redis 提供的数据结构可以相对比较容易地实现这些功能,如新浪博客大量使用 Redis 存储数据和实现博客功能。