Redis缓存(笔记二:Redis常用五大数据类型)

目录

1、Redis中String字符串

1.1 常用命令解释:

1.2 原子性

1.3 具有原子性的常用命令

1.4 String数据结构


1、Redis中String字符串

  • 概念
    1. String 是 Redis 最基本的类型,可以理解成与 Memcached 一模一样的类型,一个 key对应一个 value;
    2. String 类型是二进制安全的。意味着 Redis 的 string可以包含任何数据。比如jpg图片或者序列化的对象;
    3. String 类型是 Redis 最基本的数据类型,一个 Redis 中字符串 value 最多可以是 512M;
  • 命令使用

1.1 常用命令解释:

1. set : 添加键值对到数据库中。

  • nx: 仅当数据库中不存在该键时,才能设置键值对。
  • xx: 仅当数据库中已存在该键时,才能设置键值对。与 nx 参数互斥。
  • ex: 设置键的过期时间(秒)。
  • px: 设置键的过期时间(毫秒)。与 ex 参数互斥。

示例:

set mykey myvalue nx ex 60

2. get : 获取指定键的值。

示例:

get mykey

3. append : 将给定的值追加到原值的末尾。

示例:

append mykey " additional text"

4. strlen : 获取键值的长度。

示例:

strlen mykey

5. setnx : 仅当键不存在时,设置键的值。

示例:

setnx mykey myvalue

6. incr : 将键中储存的数字值加1。只能对数字值操作,如果键不存在,则设置初始值为1。

示例:

incr mycounter

7. decr : 将键中储存的数字值减1。只能对数字值操作,如果键不存在,则设置初始值为-1。

示例:

decr mycounter

8. incrby key num:对数字定义自增数量

        只能对数字值操作,如果为空,新增值为-1; incrby/decrby <key><步长>将 key 中储存的数字值增减。自定义步长;

1.2 原子性

redis是单线程操作,并不会被打乱;

所谓原子操作是指不会被线程调度机制打断的操作;

这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch(切换到另一个线程);

(1)在单线程中能够在单条指令中完成的操作都可以认为是"原子操作",因为中断只能发生于指令之间;

(2)在多线程中,不能被其它进程(线程)打断的操作就叫原子操作;

Redis 单命令的原子性主要得益于 Redis 的单线程;

1.3 具有原子性的常用命令

        以下是 Redis 中多个键值操作及范围操作的命令和解释,这些命令都具备原子性(即操作要么全部成功,要么全部失败),确保数据一致性和安全性。

  • mset <key1> <value1> <key2> <value2> ...: 同时设置一个或多个键值对。
    • 如果某个键设置失败,则所有键值对都不会被设置。
    • 示例:
mset key1 value1 key2 value2
  • mget <key1> <key2> <key3> ...: 同时获取一个或多个键的值。
    • 返回顺序与提供的键顺序一致。
    • 示例:
mget key1 key2 key3
  • msetnx <key1> <value1> <key2> <value2> ...: 同时设置一个或多个键值对,仅当所有给定键都不存在时。
    • 如果某个键已经存在,则所有键值对都不会被设置。
    • 示例:
msetnx key1 value1 key2 value2
  • getrange <key> <start> <end>: 获取指定键值的部分字符串,类似于 Java 中的 substring,前包后包。
    • 示例:
getrange mykey 0 4  # 获取从索引0到4的子字符串
  • setrange <key> <offset> <value>: 从指定位置开始,用新的值覆写原值。
    • 示例:
setrange mykey 6 "redis"  # 从索引6开始,用"redis"覆盖原值
  • setex <key> <seconds> <value>: 设置键值的同时,设置过期时间(单位:秒)。
    • 示例:
setex mykey 60 "value"  # 设置键mykey的值为"value",并在60秒后过期
  • getset <key> <value>: 设置新的值,并返回旧值。
    • 示例:
getset mykey "newvalue"  # 设置mykey的新值为"newvalue",并返回旧值
1.4 String数据结构

        String 的数据结构为简单动态字符串(Simple Dynamic string,缩写 SDS)。是可以修改的字符串,内部结构实现上类似于 Java的 ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配;

        如图中所示,内部为当前字符串实际分配的空间 capacity 一般要高于实际字符串长度len。当字符串长度小于 1M时,扩容都是加倍现有的空间,如果超过 1M,扩容时一次只会多扩 1M的空间。需要注意的是字符串最大长度为 512M。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软设之排序算法对比

直接插入 时间复杂度:平均情况为O(n^2)。特殊情况下基本有序最优为O(n) 空间复杂度:O(1) 希尔排序 时间复杂度:平均情况O(n^1.3) 空间复杂度:O(1) 直接选择排序 时间复杂度:O(n^2) 空间复杂度:O(1) 堆排序 时间复杂度:O(nlog(2)n) 空间复杂度:O(1) 冒泡排序 时间…

第6章:数据库设计基础知识

数据库基本概念 数据(Data)是描述事物的符号记录&#xff0c;它具有多种表现形式&#xff0c;可以是文字、图形、图像、声音和语言等。数据库系统(DataBase System&#xff0c;DBS)是一个采用了数据库技术&#xff0c;有组织地、动态地存储大量相关联数据&#xff0c;从而方便多…

3162. 优质数对的总数 I

给你两个整数数组 nums1 和 nums2&#xff0c;长度分别为 n 和 m。同时给你一个正整数 k。 如果 nums1[i] 可以被 nums2[j] * k 整除&#xff0c;则称数对 (i, j) 为 优质数对&#xff08;0 < i < n - 1, 0 < j < m - 1&#xff09;。 返回 优质数对 的总数。 示…

第100天:权限提升-数据库RedisPostgre第三方软件TV向日葵服务类

目录 思维导图 案例一: 数据库-Redis 数据库权限提升-计划任务 案例二: 数据库-PostgreSQL 数据库权限提升-漏洞 PostgreSQL 提权漏洞&#xff08;CVE-2018-1058&#xff09; PostgreSQL 高权限命令执行漏洞&#xff08;CVE-2019-9193&#xff09; 案例三: 三方应用-…

【数据结构与算法 经典例题】(C语言)反转链表图文详解

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法 经典例题》C语言 期待您的关注 ​ 目录 一、问题描述 二、解题思路分析 三、代码实现 一、问题描述 二、解题…

c++ 函数作为参数

在C中&#xff0c;函数指针或函数对象可以作为参数传递给另一个函数&#xff0c;实现了函数的动态调用和灵活性。这种机制在回调函数、事件处理、泛型编程等领域中非常有用。 1.函数指针作为参数&#xff1a; 函数指针可以指向特定函数&#xff0c;并被用作参数传递给另一个函数…

uniapp使用uQRCode页面不显示也不报错

我使用的版本是&#xff1a;4.0.6 引入到项目中后根据官方的配置教程进行配置&#xff1a; 但是页面上就是不显示&#xff0c;也不报错&#xff0c;看官网发现步骤也没问题 解决方法&#xff1a; 这句话代表的是uQrcode会被自动引用注册&#xff0c;但是你引过组件库或者别的…

Java进阶学习笔记37——正则表达式

正则表达式&#xff1a; 就是由一些特定的字符组成的&#xff0c;代表的是一个规则。 作用&#xff1a; 1&#xff09;用来校验数据格式是否合法&#xff1b; 校验电话号码是否合法&#xff1b; 校验邮箱是否合法&#xff1b; 用户输入的QQ号码是否合法&#xff1b; 2&…

QT treeWidget如何添加虚线

1、添加以下代码即可&#xff1a; ui.treeWidget->setStyle(QStyleFactory::create("windows"));2、效果如下&#xff1a;

基于 vue-element-template 框架添加 tagsview

1. 需求 vue-element-template 是一个基础模板&#xff0c;默认没有 tagsview。所以要手动添加。 参考最全面的集成方案框架 vue-element-admin &#xff0c;拷贝和修改相关文件到你的项目中。 2. 修改 复制如下文件或文件夹 \src\layout\components\TagsView\src\store\mo…

Windows11+Ubuntu24.04双系统安装及配置

目录 0. 前言1. Ubuntu24.04的安装2. Ubuntu24.04的配置2.1 基本配置2.2 开发环境配置 0. 前言 我去年在做一个项目的时候需要用到ros&#xff0c;ros需要运行在Ubuntu系统上。但我的笔记本电脑配置不是很好&#xff0c;采用虚拟机运行的想法随之被否决&#xff0c;决定采用安…

【ZZULI数据结构实验四】:C语言排序算法大比拼

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…

分离式光电液位传感器与浮球开关相比具有哪些优势

分离式光电液位传感器与浮球开关相比有哪些优势&#xff1f;分离式光电液位传感器依据光学原理&#xff0c;在传统光学传感器的基础上进行了改进。其特点是将光学组件分离出来&#xff0c;置于水箱外部感应&#xff0c;而传感器本身则独立于水箱外。这种设计有效解决了浮球开关…

EtherCAT 和 UDP 通讯的实时性 区别

EtherCAT 和 UDP 是两种不同的通信协议&#xff0c;它们在实时性方面有着本质的区别&#xff0c;主要体现在以下几个方面&#xff1a; 实时性设计目的&#xff1a; EtherCAT 是专为工业自动化设计的实时以太网协议&#xff0c;它通过独特的数据通信机制实现了极高的实时性能。E…

【智能算法】花斑翠鸟优化算法(PKO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;A Bouaouda受到自然界中花斑翠鸟社会行为启发&#xff0c;提出了花斑翠鸟优化算法&#xff08;Pied Kingfisher Optimizer, PKO&#xff09;。 2.算法原理 2.1算法思想…

mac安装nigix

1. 查看是否存在 nginx 执行brew search nginx 命令查询要安装的软件是否存在 brew search nginx 2. 安装nginx brew install nginx 3. 查看版本 nginx -v 4. 查看信息 查看ngxin下载的位置以及nginx配置文件存放路径等信息 brew info nginx 下载的存放路径 /usr/loca…

Vue3-Pinia状态管理器

Pinia 是 Vue 的专属状态管理库&#xff0c;它允许你跨组件或页面共享状态。如果你熟悉组合式 API 的话&#xff0c;你可能会认为可以通过一行简单的 export const state reactive({}) 来共享一个全局状态。对于单页应用来说确实可以&#xff0c;但如果应用在服务器端渲染&…

OVF(Open Virtualization Format)或OVA(Open Virtual Appliance)格式有什么区别

OVF&#xff08;Open Virtualization Format&#xff09;和OVA&#xff08;Open Virtual Appliance&#xff09;是两种不同的文件格式&#xff0c;它们都是用于虚拟机的打包和交换的开放标准。以下是它们之间的主要区别&#xff1a; 1. **OVF&#xff08;Open Virtualization …

Ant-Design-Vue动态表头并填充数据

Ant-Design-Vue动态表头并填充数据 Ant-Design-Vue 是一个基于 Vue.js 的前端UI框架&#xff0c;它继承了 Ant Design 的优秀设计理念&#xff0c;并针对 Vue.js 进行了深度优化。在实际开发过程中&#xff0c;我们经常需要处理各种复杂的表格数据&#xff0c;而 Ant-Design-V…

Renesas MCU之使用Keil搭建开发环境

目录 概述 1 软件安装 1.1 软件版本信息 1.2 安装FSP 1.3 安装和配置Keil 2 使用FSP创建工程 2.1 FSP中配置参数 2.2 配置板卡硬件资源 3 Keil中配置项目 3.1 在Keil配置FSP 3.2 添加user src目录 3.3 配置下载项 3.4 测试下载功能 4 使用stm32 NUCLEO板卡的ST-L…