redis 字符串类型常用场景以及相关示例

这篇具有很好参考价值的文章主要介绍了redis 字符串类型常用场景以及相关示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如题,记录一下相关内容

可以先看一下系列第一篇文章

缓存

字符串可以用作缓存键值对的存储方式。通过将经常使用的数据存储为字符串,可以提高读取速度,并减少数据库等后端系统的负载

数据库查询结果的缓存

场景

  • 频繁读取相同数据 当某个数据被频繁地读取,而且这些读取操作对应的数据库查询操作比较耗时时,可以将查询结果缓存起来。这样避免每次都去执行数据库查询操作,提高读取速度和系统性能。
  • 数据更新频率较低 如果某个数据的更新频率较低,哪怕在缓存中存储的数据不是最新的,也不会对业务造成严重影响。例如某个网站的用户列表,在短时间内用户的新增、删除或修改操作较少,可以通过缓存数据库查询结果减少对数据库的访问,提高响应速度。
  • 并发读取压力较大 当多个用户同时访问并请求相同的数据时,如果每个请求都去执行数据库查询操作,会增加数据库的并发读取压力。通过缓存数据库查询结果,可以减少并发读取对数据库的影响,提高系统的并发处理能力。
  • 数据库性能有限 某些情况下,数据库本身的性能较差或者无法进行水平扩展,无法满足高并发读取需求。通过缓存查询结果,可以减少对数据库的访问次数,降低数据库负载,提高整体系统性能。

流程


  1. client 发送一个请求到应用程序,请求某个数据
  2. server 检查缓存中是否存在相应的数据,以键值对的形式进行查找
  3. 如果缓存中存在该数据,server 直接从缓存中获取并返回给 client
  4. 如果缓存中不存在该数据,server 会执行数据库查询操作,从数据库中获取数据。
  5. server 将从数据库中获取的数据存储到缓存中,以便下次使用。
  6. server 将从数据库中获取的数据返回给 client 并在返回前将数据存储到缓存中。
  7. 下次如果有相同的请求, server 会直接从缓存中获取数据,并返回给 client 无需再次查询数据库。

代码示例 (省略配置redis)

/**
* laravel 查询构造器中已经内置了相应的缓存方法
*/
$where = [];//查询条件
// 查找符合 $where 条件的用户,并将查询结果缓存起来,有效期为 10 分钟。通过 get 方法获取查询结果的集合。
$users = User::where($where)->remember(10)->get();
/**
* thinkphp同laravel一样实现了查询构造器的内嵌
*/
// cache(true, 600) 表示将查询结果缓存起来,有效期为 600 秒(即 10 分钟)
$users = User::where($where)->cache(true, 600)->select();

API请求结果的缓存

场景

  • 提高性能 当API的响应结果相对稳定且耗时较长时,将API请求结果进行缓存。在后续相同的请求中,可以直接从缓存中获取结果,减少了对API的实际调用,加快了响应速度,提高了系统的整体性能
  • 减轻服务压力 高并发的情况下如果每次请求都要去实际调用API获取结果,会加重服务器的负载。通过缓存API请求结果,可以减轻服务器的压力,降低系统资源消耗,提高系统的可扩展性和稳定性
  • 优化用户体验 对于一些公共数据、静态数据或者频繁请求的数据,将其缓存可以提供更好的用户体验。用户可以快速获取到经过缓存的数据,无需等待API的实际响应时间,减少了等待时间

流程


  1. 客户端发送一个请求到应用程序,请求某个API接口的数据。
  2. 应用程序首先检查缓存中是否存在对应的API请求结果,以键值对的形式进行查找。
  3. 如果缓存中存在该API请求结果,应用程序直接从缓存中获取并返回给客户端。
  4. 如果缓存中不存在该API请求结果,应用程序会向API服务发送请求,获取数据。
  5. 应用程序将从API服务获取的数据存储到缓存中,以便下次使用。
  6. 应用程序将从API服务获取的数据返回给客户端,并在返回前将数据存储到缓存中。
  7. 下次如果有相同的API请求,应用程序会直接从缓存中获取数据,并返回给客户端,无需再次请求API服务。

代码示例


/**
* laravel中可以拿cache助手函数或者Cache门面类来优雅使用缓存
*/
use Illuminate\Support\Facades\Cache;

public function getApiData()
{
    $key = 'api_data'; // 缓存键名
    $minutes = 10; // 缓存有效期,单位分钟

    // 尝试从缓存中获取数据,如果缓存不存在,则执行回调函数获取数据
    $result = Cache::remember($key, $minutes, function () {
        $apiResult = // 发起数据查询并获取结果
        return $apiResult;
    });
    return $result;
}

/**
* thinkphp 中也是差不多
*/
use think\facade\Cache;
public function getApiData()
{
    $key = 'api_data'; // 缓存键名
    $expire = 600; // 缓存有效期,单位秒
    // 尝试从缓存中获取数据,如果缓存不存在,则执行回调函数获取数据
    $result = Cache::remember($key, $expire, function () {
        $apiResult = // 发起数据查询并获取结果
        return $apiResult;
    });
    return $result;
}

预先计算结果的缓存

场景

  • 频繁计算且结果稳定 当某个计算过程相对耗时且结果在特定时间段内保持不变时,可以将计算结果缓存起来。这样,在后续请求中可以直接从缓存中获取结果,避免重复计算,提高响应速度。
  • 数据库查询结果缓存 当数据库的查询操作比较复杂且耗时,而查询结果又在一段时间内保持一致时,可以将查询结果进行缓存。这样,在后续请求中可以直接从缓存中获取数据,减轻数据库负载。
  • API请求结果缓存 当应用需要频繁调用第三方API获取数据时,可以将API请求结果进行缓存。这样可以减少对第三方API的请求次数,降低延迟,并且在短时间内多次请求相同的API时,可以直接从缓存中获取数据。
  • 复杂计算结果的缓存 如果某个计算结果的计算成本很高,但是在一段时间内保持不变,可以将计算结果进行缓存。这样在后续请求中可以直接使用缓存结果,避免重复计算,提高系统的性能。

流程


  1. 应用程序执行某个复杂的计算操作,得到一个结果。
  2. 应用程序首先检查缓存中是否存在该计算结果,以键值对的形式进行查找。
  3. 如果缓存中存在该计算结果,应用程序直接从缓存中获取并使用。
  4. 如果缓存中不存在该计算结果,应用程序会执行该复杂计算操作,得到结果。
  5. 应用程序将计算得到的结果存储到缓存中,以便下次使用。
  6. 应用程序使用计算得到的结果进行后续操作,并在使用前将结果存储到缓存中。
  7. 下次如果需要相同的计算结果,应用程序会直接从缓存中获取,并使用缓存的结果,无需再次执行复杂计算操作。

示例

和api结果缓存差不多

计数器

字符串可以用来存储和操作计数器。例如,统计网页的访问量、用户的登录次数等

场景


  • 点击统计 记录网页、广告或按钮的点击次数。每当有用户点击时,可以通过 INCR 命令将计数器加一。这样可以实时统计点击量,并根据数据进行分析和优化。
  • 并发控制 在某些场景下,需要限制或控制用户对资源的并发访问量,例如 API 接口的并发请求控制。记录每个用户的请求次数,在达到设定的阈值时进行限制或采取相应的策略。
  • 投票系统 在投票系统中,记录每个候选项的得票数。每当有用户投票时,可以通过 INCR 命令将对应候选项的计数器加一。这样可以方便地统计和显示各候选项的得票情况。
  • 消息通知计数 对于社交网络或消息推送应用,记录用户收到的未读消息数量。每当有新消息到达时,可以通过 INCR 命令将对应用户的计数器加一。这样可以快速查询和显示用户未读消息数量。
  • API 访问频率限制 在需要对 API 访问频率进行限制的场景中,记录每个 API 的访问次数。通过适当的设置和检查计数器的值,可以实施访问频率限制策略,防止恶意请求或超出授权范围的访问。
  • 缓存失效通知 在缓存应用中,记录缓存的更新时间或版本号。每当缓存发生变化时,可以通过 INCR 命令将计数器加一。这样可以在需要时快速判断缓存是否过期或需要更新。

文章来源地址https://www.toymoban.com/news/detail-560112.html

到了这里,关于redis 字符串类型常用场景以及相关示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Rust 标准库字符串类型String及其46种常用方法

    Rust主要有两种类型的字符串:str和String str 由[u8]表示,UTF-8编码的字符串的引用,字符串字面值,也称作字符串切片。&str用于查看字符串中的数据。它的大小是固定的,即它不能调整大小。 String String 类型来自标准库,它是可修改、可变长度、可拥有所有权的同样使用UTF

    2024年02月07日
    浏览(98)
  • Redis基本数据类型常用操作以及使用场景

    单值缓存 对象缓存 分布式锁 计数器 分布式系统全局序列号       对象缓存 电商购物车 优缺点 队列 微博消息和微信公号消息  微信抽奖小程序  微信微博点赞,收藏,标签   集合操作实现微博微信关注模型 集合操作实现电商商品筛选  常用操作  Zset集合操作实现排行

    2024年02月11日
    浏览(43)
  • 详细介绍五种常用字符串库函数 以及对库函数的模拟实现

    本文介绍了strlen.strcpy.strcmp.strcat.strstr五大字符串库函数及使用自定义函数模拟实现这五个字符串库函数.学会使用字符串库函数,在处理字符串时会事半功倍… 使用字符串库函数首先需要包含字符串头文件-#includestring.h 这篇博客中详细介绍到了函数-库函数和自定义函数 strlen为

    2024年02月15日
    浏览(38)
  • 【SQL开发实战技巧】系列(三十三):数仓报表场景☞从不固定位置提取字符串的元素以及搜索满足字母在前数字在后等条件的数据

    【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串UNION与OR的使用注意事项 【SQL开发实战技巧】系列

    2023年04月13日
    浏览(53)
  • 解决Data too long for column ‘xxx‘ at row 1问题以及深入理解mysql的字符串数据类型(char,varchar,enum,text,longtext...)

    今天在测试环境新增数据时,报出如是错误: Data too long for column \\\'apply_service_type\\\' at row 1 。 为了复现这个问题,我特地在本地数据库中增加如下 test 表:

    2023年04月17日
    浏览(49)
  • python字符串相关

    reverse() 函数用于反向 列表中 元素。 reverse()方法语法: seq — 需要转换的序列,如元组、列表、字符串、range 可惜 不能反转字符串 语法: \\\'sep\\\'.join(sep_object) 参数说明 sep:分割符,可为“,、;”等。 sep_object:分割对象,可为字符串、以及储存字符串的元组、列表、字典。

    2024年02月09日
    浏览(32)
  • 【C#】字符串拼接相关

    目录 1.字符串拼接方式1 用+号进行字符串拼接 复合运算符 += 2.字符串拼接方式2 3.控制台打印拼 4.例子  之前的算数运算符 只是用来数值类型变量进行数学运算的 而 string 不存在算数运算符 不能计算 但是可以通过+号来进行字符串拼接 用+号进行字符串拼接 复合运算符 += 按数

    2024年02月04日
    浏览(41)
  • 【python基础】基本数据类型-字符串类型

    视频讲解: 字符串数据类型01 字符串就是一系列字符。在python中,用引号括起来文本内容的都是字符串。 其语法格式为:‘文本内容’或者“文本内容” 编写程序如下所示 我们发现其中的引号可以是单引号,也可以是双引号。这样的灵活性可以使我们进行引号之间的嵌套。

    2024年02月06日
    浏览(52)
  • mysql 拼接字符串,截取字符串 常用方式

    1,拼接字符串常用:CONCAT(‘需要拼接的字符串’,列名) CONCAT(\\\'+\\\',b.Telephone)查询出号码,前边加上+号 2,分割字符串 substring_index(b.Telephone,\\\'+\\\',1) 用从左往右的第一个+分割电话号码,获取分割后的从左往右的第一个字符串 比如 86+133333333 执行完后 为 86 substring_index(b.Telephone,\\\'+\\\',

    2024年02月14日
    浏览(51)
  • 字符串相关高频面试题算法

    一、字符串 java:String内置类型,不可更改。(如需更改可考虑:StringBuffer, StringBuilder,char[]等) 二、归类 字符串涉及到的相关题型通常会是以下几个方面: 概念理解:字典序 简单操作:插入删除字符、旋转 规则判断(罗马数字转换 是否是合法的整数、浮点数) 数字运算(

    2024年02月09日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包