zoukankan      html  css  js  c++  java
  • 分布式缓存Redis高级应用实战:为什么要用缓存机制

    今天为大家分享一个系列的教程Redis高级应用实战分布式缓存,今天文章内容概要:1、那么分布式缓存为什么要用Redis,什么是redis,2、为什么要用缓存机制,3、而Redis作为单线程模型为什么效率还这么高?4、Redis服务安装及常用命令解析

    1. 什么是Redis


    • NoSQL

    • 分布式缓存中间件

    • key-value存储

    • 提供海量的数据存储访问

    • 所有数据放在内存中,读取速度非常快

    • 非关系型,分布式、开源,支持水平扩展

    2. 为什么使用内存缓存数据库

    因为在我们的基础架构,我们的数据库一般都是第一节点(主从、MMM、MHA)

    一遍导致数据库缓慢或宕机的都是查询导致的,update、delete,80%的SQL都是查询,如果能够将这80%SQL抽离到缓存中;

    Redis VS Memcache VS Ehcache

    • Ehcache

      • 不支持集群,单点

      • 不支持分布式,存储容量不支持扩展

      • 基于Java开发的,被apache认证

      • 基于JVM缓存的

      • 简单、轻巧、方便(广泛的应用于hibernate,Mybatis)

      • 优点

      • 缺点

    • Memcache

      • 无法容灾

      • 无法持久化

      • 简单的key-value存储

      • 内存使用率比较高

      • 支持多核多线程

      • 优点

      • 缺点

    • Redis

      • 单线程(不建议进行大数据量的存储)

      • 单核(无法充分利用CPU多核性能,建议使用多实例)

      • 丰富的数据结构

      • 持久化:RDB、AOF

      • 主从同步、故障转移(MySQL;主从)

      • 内存数据库

      • 优点

      • 缺点

    3、Redis作为单线程模型为什么效率还这么高?


    1、纯内存访问:数据存放在内存中,内存的响应时间是100纳秒

    2、非阻塞式的I/O操作:Redis采用epoll作为I/O多路复用技术的实现

    3、采用单线程避免了不必要的上下文切换和竞争条件

    什么是多路复用

    如果你是一个老师,有30个学生做一道题,做完需要检查

    1、按顺序检查,A,B,C

    2、你创建30个分身,来检查30个结果

    3、谁做完了谁举手,A,B、C,D

    4. Redis服务安装及常用命令解析


    # redis下载解压后
    yum -y install gcc-c++
    make && make install
    # cd /usr/local/bin 将redis相关的命令安装进来
    # 进入redis根目录对redis.conf进行修改
    daemonize yes #后台执行
    dir /usr/local/redis-6379 #工作目录
    bind 0.0.0.0 #ip访问控制,这里是放开的意思
    requirepass icoding #设置redis密码
    port 6379
    pidfile /var/run/redis_6379.pid #进程id存放文件
    maxcliens 0 #客户端的最大连接数,默认0就是不限制
    timeout 0 #客户端连接的超时时长,默认0就是关闭不限制
    #启动Redis
    redis-server redis.conf

    Redis五大数据类型

    • string

    keys * #查看redis当前数据库所有的key-value,生成上不要用keys abc*
    set / setnx : 后者如果有数据就不生效,前者有数据就覆盖expire username
    # redis默认配置有16个DB数据库,可以增减flushdb 
    #删除当前DB中所有数据flushall 
    #删除所有DB中的数据# 如果要关闭这两个命令的rename-command FLUSHDB "" 
    # rename-command FLUSHDB "icodingfloushdb"rename-command FLUSHALL "" 
    • hash:对象

    # 比如一个对象,这个一般在购物车中使用比较多
    user {
      name: icoding
      age: 18
      sex: male
    }
    hset user name icoding age 18 sex male
    type user
    hget user name
    hgetall user
    • list:栈

    # 做管道通知
    lpush userList 1 2 3 4 5
    lpop userList
    rpop userList
    • set:集合

    sadd userSet 1 2 3 4 5 6 5 4 3 2 1
    smembers userSet
    srandmember userSet 2 #随机展示两个
    spop userSet 2 #随机取两个 可以做抽奖
    • zset:带有一个数据标签的集合

    zadd za1 10.99 apple 20.11 peach 40.89 banana 30.80 pear 50.79 cherry
    zrange za1 0 -1 withscores
    • GEO

    # 在Redis3.2版本后才支持
    # 添加地理坐标
    geoadd china:city 116.408 39.904 beijing 121.445 31.213 shanghai 113.265 23.108 guangzhou 114.109 22.544 shenzhen 108.969 34.285 xian 108.55 34.09 changan
    # 获得两个节点间的距离
    geodist china:city shanghai beijing km # m、km、mi、ft
    # 搜一搜周边,摇一摇
    georadiusbymember china:city beijing 1300 km withdist withcoord asc count 2

    如果需要本期图文教程的视频教程,请关注“艾编程”公众号,回复关键词“Redis”或者“分布式缓存”,看本期课程的视频+图文教程,还能收获更多哦! 

     

  • 相关阅读:
    Nubia Z5S官方4.4 UI2.0音频Audio部分简单分析(也适用于其它8974/8064机型)以及降低破音出现几率的方法
    import MySQLdb UserWarning
    Visual Studio 2013 Update2
    cocos2d 重写顶点着色语言
    tomcat之组成结构
    4、Android Activity的生命周期 Activity的生命周期
    学习中遇到的c++问题,持续更新
    Android开发之发送邮件功能的实现(源码分享)
    Java 类型, Hibernate 映射类型及 SQL 类型之间的相应关系
    QT内label控件通过opencv显示图像
  • 原文地址:https://www.cnblogs.com/icodingedu/p/12882488.html
Copyright © 2011-2022 走看看