码迷,mamicode.com
首页 > 其他好文 > 详细

Redis相关知识

时间:2018-03-02 18:41:51      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:html   数据保存   微博   mongodb   strong   mysql   hash   大内存   编写   

Redis 存储的五种

字符串类型:string

散列类型:  hash

列表类型: list

集合类型: set

有序集合类型: SortedSet

 

Redis与数据库比较

mysql是持久化存储,存放在磁盘里面,检索的话,会涉及到一定的IO,为了解决这个瓶颈,于是出现了缓存,比如现在用的最多的 memcached(简称mc)。首先,用户访问mc,如果未命中,就去访问mysql,之后像内存和硬盘一样,把数据复制到mc一部分。

  redis和mc都是缓存,并且都是驻留在内存中运行的,这大大提升了高数据量web访问的访问速度。然而mc只是提供了简单的数据结构,比如 string存储;redis却提供了大量的数据结构,比如string、list、set、hashset、sorted set这些,这使得用户方便了好多,毕竟封装了一层实用的功能,同时实现了同样的效果,当然用redis而慢慢舍弃mc。

  内存和硬盘的关系,硬盘放置主体数据用于持久化存储,而内存则是当前运行的那部分数据,CPU访问内存而不是磁盘,这大大提升了运行的速度,当然这是基于程序的局部化访问原理。

  推理到redis+mysql,它是内存+磁盘关系的一个映射,mysql放在磁盘,redis放在内存,这样的话,web应用每次只访问redis,如果没有找到的数据,才去访问Mysql。

  然而redis+mysql和内存+磁盘的用法最好是不同的。

前者是内存数据库,数据保存在内存中,当然速度快。
后者是关系型数据库,功能强大,数据访问也就慢。
像memcache,mongoDB,Redis,都属于No sql系列。

访问速度:redis把数据存放在内存中快,mysql把数据存放在硬盘中速度慢

访问容量:mysql存放的数量大于redis,redis要做好容量预估

redis持久化不如mysql,重要的数据存在mysql中,那些读写频繁的热数据放在redis中

使用缓存框架的时候,我们需要关心的就是什么时候创建缓存缓存失效策略

 

Memcache和redis对比:

1.性能上:

     性能上都很出色,具体到细节,由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起 Memcached,还是稍有逊色。

 

2.内存空间和数据量大小:

     MemCached可以修改最大内存,采用LRU算法。Redis增加了VM的特性,突破了物理内存的限制。

 

3.操作便利上:

     MemCached数据结构单一,仅用来缓存数据,而Redis支持更加丰富的数据类型,也可以在服务器端直接对数据进行丰富的操作,这样可以减少网络IO次数和数据体积。

 

4.可靠性上:

     MemCached不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的。Redis支持数据持久化和数据恢复,允许单点故障,但是同时也会付出性能的代价。

 

5.应用场景:

     Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。

     Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。

 

redis 单线程还是多线程?

Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写。官方提供的数据是可以达到100000+的qps。这个数据不比采用单进程多线程的同样基于内存的KV数据库Memcached差。

  • 多进程单线程模型:Nginx
  • 单进程多线程模型:Memcached

Redis快的主要原因是:

  1. 完全基于内存
  2. 数据结构简单,对数据操作也简单
  3. 使用多路 I/O 复用模型

单进程单线程好处

  1. 代码更清晰,处理逻辑更简单
  2. 不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
  3. 不存在多进程或者多线程导致的切换而消耗CPU
  4. 无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善;

单进程单线程弊端

  1. 无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善;

 

参考:https://www.cnblogs.com/syyong/p/6231326.html

 

Redis相关知识

标签:html   数据保存   微博   mongodb   strong   mysql   hash   大内存   编写   

原文地址:https://www.cnblogs.com/stanljj/p/8494297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!