IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 一文弄懂Redis核心数据结构之String -> 正文阅读

[大数据]一文弄懂Redis核心数据结构之String

前言

本章从String常用命令到实战应用场景需求设计开发,能够让对redis陌生的你迅速掌握了解,熟悉的你迅速巩固相关知识

一、特性说明

(一)String 是 Redis 最基本的类型,一个key对应一个value;

(二)String类型是二进制安全的。意思是 redis 的String可以包含任何数据。比如jpg图片或者序列化对象;

(三)String类型是Redis最基本的数据类型,一个键最大能存储512MB;

二进制安全是指,如果在传输数据时,保证二进制数据的信息安全,也就是不被篡改、破译,如果被攻击,能够及时检测出来;

二进制安全特点:
    编码、解码发生在客户端,执行效率高;
    不需要频繁的编解码,不会出现乱码;
复制代码

二、常用命令

(一)SET

命令格式:?SET?key value

功能:存入字符串键值

demo说明:?

image.png

(二)GET

命令格式:?get?key

功能:获取一个字符串键值

demo说明:?

image.png

(三)MSET

命令格式:?MSET?key value [key value ]

功能:批量存储字符串键值

demo说明:?

image.png

(四)MGET

命令格式:?mget key value [key value ]

功能:批量获取字符串键值

demo说明:?

image.png

(五)SETNX

命令格式:?setnx key value

功能:存入一个不存在的字符串键值

demo说明:存入一个键为test444,第一次成功,第二次已存在则返回失败?

image.png

(六)DEL

命令格式:?setnx key value

功能:存入一个不存在的字符串键值

demo说明:?

image.png

(七)EXPIRE

命令格式:?setnx key value

功能:存入一个不存在的字符串键值

demo说明:?

image.png

(八)INCR

命令格式:?incr key

功能:将key中的存储值加一,首次不存在则会创建一个值为0的key

demo说明:?

image.png

(九)DECR

命令格式:?decr key

功能:将key中的存储值减一,首次不存在则会创建一个值为0的key

demo说明:?

image.png

(十)INCRBY

命令格式:?incrby key increment

功能:将key中的存储值加上increment,首次不存在则会创建一个值为0的key

demo说明:?

image.png

(十一)DECRBY

命令格式:?incrby key increment

功能:将key中的存储值减去increment,首次不存在则会创建一个值为0的key

demo说明:?

image.png

三、应用场景

总结一下生产常用应用场景,主要分为下列几种

(一)普通数据缓存

说明:日常存入mysql的一下配置数据,可以加载到redis中

1、需求

saas服务每个商家都可以在后台动态填写自己支付配置,每次查询后需要将其缓存下来

2、设计

  • 获取配置时,首先获取一下缓存,若缓存没有数据,则查询mysql。有则直接返回配置数据
  • 查询mysql拿到配置数据,将数据缓存redis后,再返回配置
  • 缓存键设计为 paysetting:payment:{服务商id}

3、开发


//下面写了主要逻辑,没有处理异常逻辑  需要小伙伴自己补充

public PaymentDto getPaymentSetting() throws Exception{
    ObjectMapper objectMapper = new ObjectMapper();

    //查询缓存
    String key = "paysetting:payment:1";
    //查询缓存
    PaymentDto paymentDto = objectMapper.readValue((String) redisTemplate.opsForValue().get(key), PaymentDto.class);
    if(ObjectUtils.isEmpty(paymentDto)){
        //查询数据库
        PaymentDto data = getData();
        //缓存
        redisTemplate.opsForValue().set(key,objectMapper.writeValueAsString(data),3000,TimeUnit.SECONDS);
        return data;
    }
    //返回数据
    return paymentDto;
}

//这里假设从数据库获取信息
private PaymentDto getData(){
    PaymentDto paymentDto = new PaymentDto();
    paymentDto.setAppId("98765365830261325");
    paymentDto.setAppSecret("fodkcjeuhaytwgvbdmi873tg4doo");
    return paymentDto;
}
复制代码

(二)对象实例缓存

说明:业务需要的常用对象实例,也可以将其缓存起来。就像spring框架启动会把单例非懒加载的对象提前实例化缓存进JVM

(三)计数器

说明:一些实时性要求高、频繁写入的业务场景对mysql等数据库性能压榨,这时候可以使用redis来缓解。如文章点赞数、评论数之类,或者接口限流等M

1、需求

某些开放接口需要根据不同的套餐流量限制客户每天访问次数

2、设计

  • 获取套餐配置,得到客户每天能访问接口的最大次数
  • 从缓存获取今日客户已访问该接口的次数,与最大次数对比,若等于则返回提示“今日已达访问上限”。否则该接口记录次数加一
  • 缓存键设计为 {接口标识}:{year-month-day}:{服务商id}

3、开发

//下面写了主要逻辑,没有处理异常逻辑 需要小伙伴自己补充

public void limitInterface() throws Exception{
    //获取套餐配置,得到客户每天能访问接口的最大次数
    Integer limitNum = getLimitNum();
    //key值
    String key = "findData:2021-11-26:100";
    
    //查询缓存  缓存键设计为  {接口标识}:{year-month-day}:{服务商id}
    String  count = (String) redisTemplate.opsForValue().get(key);

    Integer countNum = Integer.valueOf(count);
    
    if(countNum < limitNum){
        //接口记录次数加一
        redisTemplate.opsForValue().increment(key);
        
        //继续执行业务逻辑
    }else{
        System.out.println("今日已达访问上限");
    }
}

public Integer getLimitNum(){
    //从缓存里面取,缓存没有再从数据库里面取(从数据库里面取出来后要更新到缓存)

    return 100;
}
复制代码

(四)分布式锁

说明:使用redis的setnx命令可以实现只有一个客户端成功设置一个键值,从而实现分布式锁。

(五)session共享

说明:多台机器想要实现session共享,就需要寻找一个公共存储数据的地方,或者说能够实现数据的同步。显然,redis就可以是一个公共存储数据的地方。

(六)分布式ID生成。

说明:为了保证id的唯一性,可以让redis统一生成一批id,然后取出来使用

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-27 09:57:56  更:2021-11-27 09:59:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:03:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码