导航

  • 什么是Redis?
  • Redis特点
  • Redis应用场景
  • Redis能解决哪些需求
  • Redis的缺点


disconf redis 作用 redis direct_disconf redis 作用

什么是Redis?

Redis:全称"Remote Dictionary Server ",即远程字典服务。是一个使用C语言编写的开源、支持网络、基于内存、可选持久性的键值对(key-value)存储数据库,根据月度排行网站DB-Engines.com的数据,Redis是最流行的键值对存储数据库。

Redis是一个NoSQL数据库。

Redis服务的默认端口为:6379

disconf redis 作用 redis direct_disconf redis 作用_02

Redis特点

1.读写极佳
当数据依赖不再需要,Redis这种基于内存的性质,与在执行一个事务时将每个变化都写入硬盘的数据库系统相比就显得执行效率非常高。写与读操作速度没有明显差别。因Redis是将数据加载到内存的原因,其在读写方面性能极佳,Redis能读的速度是110000次/s,写的速度是81000次/s 。

2.支持数据持久化
都知道,数据在内存中是缺乏持久性的,服务器一旦断电或者宕机,在内存中的数据就会丢失。而Redis支持数据持久化,可以将内存中的数据保存在磁盘中,在服务器宕机或者重启时,可以重新读取使用。

3.支持多种数据结构
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

4.支持数据备份
Redis支持数据的备份,即master-slave模式的数据备份。

5.具有原子性
Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性。

6.架构灵活
Redis现有多种架构,用于不同的业务场合。业务较少的情况下大多使用主从即可满足需求,对于业务繁重的环境,大多使用集群架构,一定程度上弥补了因内存原因导致处理数据量有限的情况。

7.功能丰富
Redis还支持 publish/subscribe(发布/订阅), 通知, key 过期等等特性。

8.单线程
Redis采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。

Redis应用场景

1.热点数据缓存
热点数据(经常会被查询,但是不经常被修改或者删除的数据),由于redis访问速度块、支持的数据类型比较丰富,首选是使用redis缓存。

2.计数器
用来对商品购买,视频播放,文章阅读等数据计数,为保证数据的实时性,每次浏览访问,相应的数量都要+1,有些时候并发量非常高,这对服务器来说无疑是一种挑战。Redis读写性能极佳,非常适合这种计数场合。

3.消息队列
一些访问,点击量高的网站中必备中间件,主要用于流量削峰,异步处理实时性低的业务。(和专门的中间件效果要差些)

其他的一些功能还有聊天室好友列表,各种排行榜,秒杀,抢购,数据过期处理等等。

Redis能解决哪些需求

需求引用自什么是Redis?什么是nosql?NoSQL数据库的四大分类

1、High performance - 对数据库高并发读写的需求

web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求,例如网站的实时统计在线用户状态,记录热门帖子的点击次数,投票计数等,因此这是一个相当普遍的需求。

2、Huge Storage - 对海量数据的高效率存储和访问的需求

类似Facebook,twitter,Friendfeed这样的SNS网站,每天用户产生海量的用户动态,以Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,例如腾讯,盛大,动辄数以亿计的帐号,关系数据库也很难应付。

3、High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求

在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数据库不能通过不断的添加服务器节点来实现扩展呢?

NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

Redis的缺点

1.受限于硬件
Redis数据的容量受限于物理内存,这就导致单个Redis无法用于较大数据量的操作和运算上。

解决:可通过主从或集群实现

2.无法发挥多核CPU
因Redis采用单线程运行,在调用CPU时,也只会采用单核,因此无法发挥多核CPU的性能。

解决:可以通过单机多台Redis实现

3.缓存雪崩
大量key同一时间点失效,同时又有大量请求打进来,导致流量直接打在DB上,造成DB不可用。

解决:使用多级缓存,或为热点数据设置永不失效

4.缓存穿透
用户大量并发请求的数据(key)对应的数据在redis和数据库中都不存在,导致尽管数据不存在但还是每次都会进行查DB。

解决:也为空数据缓存或者使用过滤器。