zoukankan      html  css  js  c++  java
  • 关于Redis的特点和使用场景

    Redis是常用的非关系型数据库。

    非关系型数据库基于键值对存储,数据之间没有联系,查询效率高

    【Redis特点】

    读写性能优异

    持久化

    数据类型丰富

    单线程

    数据自动过期

    发布订阅

    分布式

    【Redis的数据类型】

    string——适合最简单的k-v存储,类似于memcached的存储结构,短信验证码,配置信息等,就用这种类型来存储。

    hash——一般key为ID或者唯一标示,value对应的就是详情了。如商品详情,个人信息详情,新闻详情等。

    list——因为list是有序的,比较适合存储一些有序且数据相对固定的数据。如省市区表、字典表等。因为list是有序的,适合根据写入的时间来排序,如:最新的***,消息队列等。

    set——可以简单的理解为ID-List的模式,如微博中一个人有哪些好友,set最牛的地方在于,可以对两个set提供交集、并集、差集操作。例如:查找两个人共同的好友等。

    Sorted Set——是set的增强版本,增加了一个score参数,自动会根据score的值进行排序。比较适合类似于top 10等不根据插入的时间来排序的数据。

    【使用Redis做缓存的问题及解决方案】

    一般缓存思路:

    1.缓存穿透

    缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求。这时的用户很可能是攻击者,攻击会导致数据库压力过大。

    [解决方案]

    1.接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;

    2.从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击

    2.缓存击穿

    缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力

    [解决方案]

    1.设置热点数据永远不过期。

    2.加互斥锁

    3.缓存雪崩

    缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是, 缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。

    [解决方案]

    1.缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。

    2.如果缓存数据库是分布式部署,将热点数据均匀分布在不同缓存数据库中。

    3.设置热点数据永远不过期。

    参考博客:

    https://blog.csdn.net/kongtiao5/article/details/82771694

    记录编程的点滴,体会学习的乐趣
  • 相关阅读:
    eclipse中文乱码问题解决方案
    修改Tomcat的JDK目录
    Tomcat 5.5 修改服务器的侦听端口
    HTML DOM教程 27HTML DOM Button 对象
    HTML DOM教程 24HTML DOM Frameset 对象
    Navicat for MySQL v8.0.27 的注册码
    HTML DOM教程 25HTML DOM IFrame 对象
    Tomcat 5.5 的下载和安装
    android manifest相关属性
    ubuntu10.04 下 eclipse 小结
  • 原文地址:https://www.cnblogs.com/AduBlog/p/13521622.html
Copyright © 2011-2022 走看看