zoukankan      html  css  js  c++  java
  • Redis应用

    Redis缓存数据库

    为什么使用Redis?


    1.经常使用到读操作,而在短时间内不经常变更的数据我们会使用Redis进行存储,目的就是减少频繁访问数据库的压力,增强用户体验


    2.Redis使用起来简单灵活,支持多种数据结构,以纯内存方式进行数据存储,大大提高了读写效率


    怎么使用Redis?


    一.熟悉Redis的API

      redis命令参考大全(很直观明了):http://doc.redisfans.com/


    二.选用合适的数据结构

    1. string(字符串)

      string是最简单的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value,其上支持的操作与Memcached的操作类似。但它的功能更丰富。

    2. list(双向链表)

      list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。之所以说它是双向的,因为它可以在链表左,右两边分别操作

    3.dict(hash表)

      set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字

    4.zset(排序set)

      zset是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。 可以对指定键的值进行排序权重的设定,它应用排名模块比较多

    5.Hash类型

      Redis能够存储key对多个属性的数据(比如user1.uname user1.passwd),当然,你完成可以把这些属性以json格式进行存储,直接把它当作string类型进行操作,但这样性能上是对影响的,所以redis提出的Hash类型。


        eg.网关系统使用Redis存储连接记录(redisConnectionKey,Map(ip_client.hashCode,time)),计时器等等


    三.redis和mysql数据保持一致性

                                           

    提示:1.左边查询Redis很容易理解,先查Redis,有数据则返回给用户,没有就去查数据库,更新Redis(下次查的话就直接插Redis),然后再把数据返回给用户

         2.右边是更新操作,更新操作一般不会直接更新Redis(但是也有人会这么做,万一更新Redis后更新库失败,下次别人查Redis就是脏数据了,一切必须以数据库为主),更新数据库前可以去清空Redis,可以减少读脏的几率(在许多人看来这一步是多余的,仔细想想确实能减少读脏的几率,也确实显得有些多余,所以我用了虚线表示,具体也看不同的业务场景,如果对一致性要求比较高的话可以这么做),后面清空Redis是为了下次查询的时候去查库,然后再更新Redis(有人在更新完库后不是清空Redis,而是直接更新Redis,这也是可取的,但是会带来一个问题,如果更新完Redis后这部分数据很长一段时间内没有人去查,会不会很占内存呢?),总之,不同的业务场景有不同的用法,如果是面试时被问到,能自圆其说即可!!!



  • 相关阅读:
    【项目】 技术选型 平台和语言
    WCF 常见逻辑和代码 1.错误处理和配置
    一个挺有意思的Javascript小问题
    【设计原则和建议】 方法返回值
    一次HTTP请求中的缓存
    【设计原则和建议】 方法
    【设计原则和建议】 字段
    Express全系列教程之(一):Express的安装 和第一个程序
    js switch语句祥解[范围判断]
    修改notepad++ zencodeing 插件的配置路径
  • 原文地址:https://www.cnblogs.com/xiaoming0601/p/6480082.html
Copyright © 2011-2022 走看看