• Redis入门 看这一篇就够了


    redis介绍

    Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助

    • 读的速度是110000次/s,写的速度是81000次/s 。

    redis使用场景

    作为缓存使用

    1. 原始业务设计
      • 秒杀
      • 618活动
      • 双11活动
    2. 平台监控高频次访问数据
      • 热点新闻
    3. 高频统计、复杂的统计数据
      • 在线人数
      • 投票

    业务数据的特殊性

    1. 系统功能的升级优化
      • 但服务器升级集群
      • Session管理
      • Token管理

    redis的数据类型

    • redis数据存储格式,自身类似于Map,其中所有的数据类型都是采用key:value的形式存储
    • 数据类型指的是存储的数据的类型

    string (类似于string)

    • 存储的单个数据 value = “string”
    • 存储的内容通常使用字符串,如果字符串已证书的形式展示,可以当数字操作使用
    • 一个存储空间存储一个字符串
      在这里插入图片描述

    基本操作

    基本指令解释
    set key value添加、修改数据
    get key获取数据
    del key删除数据
    mset key1 value1 key2 value2 …(m是Multiple-多个的简写)添加或修改多个数据
    mget key1 key2 …获得多个数据
    strlen key获取字符串长度
    append key value在字符串后面追加

    set 和 mset的选择 :
    在这里插入图片描述

    • 多指令时需要考虑,根据指令长度、指令执行时间,进行合理指令切割

    string 扩展操作

    业务场景

    数据库分表操作保证id的统一性(id不重复)

    解决方案

    string作为数值操作
    • string类型在redis内部存储默认就是一个字符串,当遇到 incr 、decr操作 转成数值进行运算
    • redis 所有操作都是原子的,采用单线程,不会有产生并发问题
    • redis数值上线范围时 java中long数据的最大值 2的63次方减一 9,223,372,036,854,775,808 - 1

    这两种方法都可使用负数参数造成相反操作

    • 设置数值类型增加指定范围的值 (increment – 增长)
      • incr key 数值类型的加一操作
      • incrby key increment 数值类型按照指定数值增长
      • incrbyfloat key increment 按照给定的小数增长 (结果变成非数值类型之后不可以使用 incr 、 incrby 操作)
    • 设置数据库类型减少指定范围的值
      • decr key 数值类型的减一操作
      • decrby key increment 数值类型按照指定数值增长

    业务场景

    比如微信投票,4小小时之内可以投一票 、 热点新闻三天后线下、session不活跃失效

    解决方案

    string设置生命周期
    • setex key seconds value 设置 秒内有效
    • psetex key milliseconds value 设置 毫秒内有效、

    string 注意事项

    • 数据操作不成功的反馈与数据正常操作之间的差异
      1. 表示运行结果是否成功
        • (integer)0 -> false 失败
        • (integer)1 -> true 成功
      2. 表示运行结果的值
        • (integer)3 -> 3 3个
        • (integer)1 -> 1 1个
    • 数据没获取到
      • (nil)等同于null
    • 数据的最大存储量 512MB
    • 数值计算最大范围 (java中long的最大值)

    string 应用场景

    主页高频访问信息显示控制 例如微博粉丝数与微博数量

    例如

    1. 保存用户的信息
      • user:id:2504551:fans -> 12345671 可以代表user表的id为2504551的这条数据fans的值为12345671
    2. 利用json格式保存
      • user:id:2504551 -> {id:2504551,fans:12345671} 代表user表id为2504551这条数据的json格式

    string key的设置约定

    在这里插入图片描述

    hash (类似于hashMap)

    一个存储空间存储多个 field - value 结构

    • 如果field数量较少,存储结构优化为类似数组结构
    • 如果fileld数量较多,存储结构使用类似HashMap结构
      在这里插入图片描述

    基本操作

    基本指令解释
    hset key field value添加、修改数据
    hget key field获取数据
    hgetall key获取数据
    hdel key feild field2删除数据
    hmset key field value field1 value1 …(m是Multiple-多个的简写)添加或修改多个数据
    mget key field1 feild2 …获得多个数据
    hlen key获取哈希表字段的数量
    hexiste key field获取hash表是否存在指定的字段

    扩展操作

    • 获取hash中所有字段名或字段值
      • hkeys key
      • hvals key
    • 设置指定字段数值增加指定范围的值
      • hincrby key field increment
      • hincrbyfloat key field increment
    • 如果key有对应的值则不变,没有值则加入进入
      • hsetnx key field value

    注意事项

    • hash 类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套异常。如果数据未获取到,对应的值为(nil)
    • 每个hasj可以存储 2的32次放减一个键值对
    • hash类型十分贴近对象的数据存储形式,并且可灵活添加删除对象属性。但hash设计的初衷不是为了存储大量对象设计的,更不可以将hash作为对象列表使用
    • hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率会很低,有可能成为数据访问瓶颈

    hash应用场景

    1. 电商网站购物车设计与实现
       在这里插入图片描述
      在这里插入图片描述

    list (类似于LinkedList)

    • 数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
    • list类型:保存多个数据 ,底层使用双向链表数据结构
      在这里插入图片描述

    基本操作

    基本指令解释
    lpush key value1 value2 …添加数据
    rpush key value1 value2 …添加数据
    lrange key start stop获取数据 (range 范围)
    lindex key index获取数据
    lllen key获取长度
    del key删除数据
    lpop获取并移除数据
    srpop获取并移除数据

    扩展操作

    • 规定时间内获取并移除数据
      • blpop key [key2] timeout 等待时间后 获取并删除数据
      • brpop key [key2] timeout
    • 设置指定字段数值增加指定范围的值
      • hincrby key field increment
      • hincrbyfloat key field increment
    • 如果key有对应的值则不变,没有值则加入进入
      • hsetnx key field value
    • 移除指定的数据
      • lrem key count value
    • 常应用于具有操作顺序 栈或者队列 或者查询分页

    set (类似于HashSet)

    • 存储大量的数据,在查询方面提供更高的效率
      它是由hash结构变形而来的

    基本操作

    • 添加操作 sadd key member1 member2
    • 获取全部数据 smembers key
    • 删除数据 srem key member member2
    • 获取set数据总量scard key
    • 判断集合中是否包含指定元素 sismember key member

    扩展操作

    sorted_set (类似于TreeSet)

    持久化

    RDB

    RDB的启动方式

    save 命令 阻塞redis线程
    bgsave 后台执行保存操作 调用fork函数生成子进程
    启动的时候加载的数据
    配置 save second changes 时间范围内 多少key发生裱花进行持久化

    AOF

    以独立的日志方式记录每次写明亮,重启时执行AOF文件中命令达到恢复数据的目的

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    事务

    redis 事务
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    Service Worker cache 相比 HTTP cache 的一些优点
    Jenkins kubernetes(k8s)滚动发布实战
    redis缓存击穿 穿透
    PostgreSQL 入门教程
    微服务-统一网关Gateway
    【QNX Hypervisor 2.2用户手册】目录
    详细介绍NLP文本分类
    【C语言】进阶——指针
    (上)unity教程之UnityPath-Dream从小白到大神
    爬虫逆向实战(31)-某花顺行情中心(cookie、补环境)
  • 原文地址:https://blog.csdn.net/qq_44808472/article/details/118855232