一、什么是Redis
1、Redis是Remote Dictionary Server(远程字典服务器)的缩写,最初是作为数据库的工具来使用的。是目前使用广泛、高效的一款开源缓存。
2、Redis使用C语言开发,将数据保存在内存中,可以看成是一款纯内存的数据库,所以它的数据存取速度非常快。
3、一些经常用并且创建时间较长的内容,可以缓存到Redis中,而应用程序能以极快的速度存取这些内容。
使用Redis将这个页面缓存起来,从而减轻了网站的负担,降低了网站的延迟。
4、Redis通过键-值对(Key-Value Pair)的形式来存储数据,类似于Java中的Map映射。
- Redis的Key键,只能是string字符串类型。
- Redis的Value值类型包括:string字符类型、map映射类型、list列表类型、set集合类型、sortedset有序集合类型。
5、Redis的主要应用场景:
缓存(数据查询、短连接、新闻内容、商品内容等)
分布式会话(Session)
聊天室的在线好友列表、任务队列(秒杀、抢购、12306等)
应用排行榜、访问统计、数据过期处理(可以精确到毫秒)。
二、为什么Redis 成为缓存标准
1、速度快 不需要等待磁盘的IO,在内存之间进行的数据存储和查询。缓存的数据总量不能太大,受到物理内存空间大小的限制。
场景:数据库的查询比较耗时,而使用缓存能大大节省数据访问的时间。假如表中有2千万个用户信息,在加载用户信息时,一次数据库查询大致的时间在数百毫秒级别。这仅仅是一次查询,如果是频繁多次的数据库查询,效率就会更低。
解决方法:把数据加入缓存,每次加载数据之前,先去缓存中加载,如果为空,再去查询数据库并将数据加入缓存,这样可以大大提高数据访问的效率。
2、丰富的数据结构 string 、list、hash、set、sortedset 五种类型。
3、单线程,避免线程切换和锁机制的性能消耗。
4、可持久化 支持RDB与AOF两种方式,将内存中的数据写入外部的物理存储设备。
5、支持发布/订阅。
6、支持Lua脚本。
7、支持分布式锁 在分布式系统中,不同的节点需要访同到一个资源,需要通过互斥机制来防止彼此干扰,并且保证数据的一致性。
原理上与Java的锁实现不同线程之间的同步访问是类似的。
8、支持原子操作和事务Redis事务是一组命令的集合。
一个事务中的命令要么都执行,要么都不执行。
如果命令在运行期间出现错误,不会自动回滚。