zoukankan      html  css  js  c++  java
  • Redis相关知识

    Redis 存储的五种

    字符串类型:string 一个String类型的value最大可以存储512M

    String是最常用的一种数据类型,普通的key/value存储.

    散列类型:  hash 键值对个数最多为2^32-1个,也就是4294967295个。

    类似于表记录的存储

    页面视图所需数据的存储

    列表类型: list   list的元素个数最多为2^32-1个,也就是4294967295个。

    比较适用于列表式存储且顺序相对比较固定,例如:

    省份、城市列表

    品牌、厂商、车系、车型等列表

    拆车坊专题列表…

    集合类型: set 元素个数最多为2^32-1个,也就是4294967295个。

    Set对外提供的功能与list类似,当需要存储一个列表数据,又不希望出现重复数据时,可选用set

    有序集合类型: SortedSet 跟set一样

    zset的使用场景与set类似,区别是set不是自动有序的,而zset可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序.当你需要一个有序的并且不重复的集合列表,那么可以选择zset数据结构。例如:

    根据PV排序的热门车系车型列表

    根据时间排序的新闻列表

    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和Memcache性能测试对比

    https://www.cnblogs.com/datang6777/p/6811235.html

  • 相关阅读:
    批量插入数据&自定义分页器
    ajax
    Django 多对多表关系的三种创建方式
    Django ORM之F与Q查询
    Django ORM跨表查询&聚合、分组查询
    Django ORM多表操作
    Django ORM单表操作常用字段
    HashMap的容量大小增长原理(JDK1.6/1.7/1.8)
    80端口被占用
    中级视频地址
  • 原文地址:https://www.cnblogs.com/stanljj/p/8494297.html
Copyright © 2011-2022 走看看