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

news2024/11/18 19:46:27

目录

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.coloradmin.cn/o/1799399.html

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

相关文章

Go微服务: 基于使用场景理解分布式之二阶段提交

概述 二阶段提交&#xff08;Two-Phase Commit&#xff0c;2PC&#xff09;是一种分布式事务协议&#xff0c;用于在分布式系统中确保多个参与者的操作具有原子性即所有参与者要么全部提交事务&#xff0c;要么全部回滚事务&#xff0c;以维持数据的一致性它分为两个阶段进行&…

php反序列化中的pop链

目录 一、什么是POP 二、成员属性赋值对象 例题&#xff1a; 方法一 方法二 三、魔术方法的触发规则 例题&#xff1a; 四、POC的编写 例题1&#xff1a; 例题2 [NISACTF 2022]babyserialize 今日总结&#xff1a; 一、什么是POP 在反序列化中&#xff0c;我们…

DexCap——斯坦福李飞飞团队泡茶机器人:更好数据收集系统的原理解析、源码剖析

前言 2023年7月&#xff0c;我司组建大模型项目开发团队&#xff0c;从最开始的论文审稿&#xff0c;演变成目前的两大赋能方向 大模型应用方面&#xff0c;以微调和RAG为代表 除了论文审稿微调之外&#xff0c;目前我司内部正在逐一开发论文翻译、论文对话、论文idea提炼、论…

RDMA (1)

RDMA是什么 Remote Direct Memory Access(RDMA)是用来给有高速需求的应用释放网络消耗的。 RDMA在网络的两个应用之间进行低延迟,高吞吐的内存对内存的直接数据通信。 InfiniBand需要部署独立的协议。 RoCE(RDMA over Converged Ethernet),也是由InfiniBand Trade Associat…

不要硬来!班组管理有“巧思”

班组管理&#xff0c;听起来似乎是一个充满“硬气”的词汇&#xff0c;让人联想到严肃、刻板的制度和规矩。然而&#xff0c;在实际操作中&#xff0c;我们却需要运用一些“巧思”&#xff0c;以柔克刚&#xff0c;让班组管理既有力度又不失温度。 在班组管理中&#xff0c;我们…

Istio_1.17.8安装

项目背景 按照istio官网的命令一路安装下来&#xff0c;安装好的istio版本为目前的最新版本&#xff0c;1.22.0。而我的k8s集群的版本并不支持istio_1.22的版本&#xff0c;导致ingress-gate网关安装不上&#xff0c;再仔细查看istio的发布文档&#xff0c;如果用istio_1.22版本…

Fatfs

STM32进阶笔记——FATFS文件系统&#xff08;上&#xff09;_stm32 fatfs-CSDN博客 STM32进阶笔记——FATFS文件系统&#xff08;下&#xff09;_stm32 文件系统怎样获取文件大小-CSDN博客 STM32——FATFS文件基础知识_stm32 fatfs-CSDN博客 021 - STM32学习笔记 - Fatfs文件…

Go select 语句使用场景

1. select介绍 select 是 Go 语言中的一种控制结构&#xff0c;用于在多个通信操作中选择一个可执行的操作。它可以协调多个 channel 的读写操作&#xff0c;使得我们能够在多个 channel 中进行非阻塞的数据传输、同步和控制。 基本语法&#xff1a; select {case communica…

纷享销客集成平台(iPaaS)的应用与实践

案例一 企业系统集成的产品级解决方案 概况 随着国家出台一系列鼓励LED照明产业发展与创新的规划和政策&#xff0c;以及国际市场全球演唱会、音乐会的活跃以及线上零售、商业地产等行业回暖&#xff0c;LED显示行业发展形势积极向好。深圳市艾比森光电股份有限公司&#xff…

第一周:计算机网络概述(上)

一、计算机网络基本概念 1、计算机网络通信技术计算机技术 计算机网络就是一种特殊的通信网络&#xff0c;其特殊之处就在于它的信源和信宿就是计算机。 2、什么是计算机网络 在计算机网络中&#xff0c;我们把这些计算机统称为“主机”&#xff08;上图中所有相连的电脑和服…

【动手学深度学习】softmax回归的简洁实现详情

目录 &#x1f30a;1. 研究目的 &#x1f30a;2. 研究准备 &#x1f30a;3. 研究内容 &#x1f30d;3.1 softmax回归的简洁实现 &#x1f30d;3.2 基础练习 &#x1f30a;4. 研究体会 &#x1f30a;1. 研究目的 理解softmax回归的原理和基本实现方式&#xff1b;学习如何…

开发人员必备的常用工具合集-lombok

Project Lombok 是一个 java 库&#xff0c;它会自动插入您的编辑器和构建工具&#xff0c;为您的 Java 增添趣味。 再也不用编写另一个 getter 或 equals 方法了&#xff0c;只需一个注释&#xff0c;您的类就拥有了一个功能齐全的构建器&#xff0c;自动化了您的日志记录变量…

从零开始手把手Vue3+TypeScript+ElementPlus管理后台项目实战五(引入vue-router,并给注册功能加上美丽的外衣el-form)

安装vue-router pnpm install vue-router创建router src下新增router目录&#xff0c;ruoter目录中新增index.ts import { createRouter, createWebHashHistory } from "vue-router"; const routes [{path: "/",name: "Home",component: () …

SQL语句练习每日5题(四)

题目1——查找GPA最高值 想要知道复旦大学学生gpa最高值是多少&#xff0c;请你取出相应数据 题解&#xff1a; 1、使用MAX select MAX(gpa) FROM user_profile WHERE university 复旦大学 2、使用降序排序组合limit select gpa FROM user_profile WHERE university 复…

当C++的static遇上了继承

比如我们想要统计下当前类被实例化了多少次&#xff0c;我们通常会这么写 class A { public:A() { Count_; }~A() { Count_--; }int GetCount() { return Count_; }private:static int Count_; };class B { public:B() { Count_; }~B() { Count_--; }int GetCount() { return …

LeetCode1143最长公共子序列

题目描述 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08…

Type-C音频转接器方案

在数字化时代&#xff0c;音频设备作为我们生活中不可或缺的一部分&#xff0c;其连接方式的便捷性和高效性显得尤为重要。Type-C音频转接器&#xff0c;作为一种新型的音频连接解决方案&#xff0c;正逐渐走进我们的生活&#xff0c;以其独特的优势改变着我们的音频体验。 一、…

数据库设计步骤、E-R图转关系模式、E-R图的画法

一、数据库设计步骤 ①需求分析阶段 准确了解与分析用户需求。 ②概念结构设计阶段 通过对用户需求进行综合、归纳与抽象&#xff0c;形成一个独立于具体数据库管理系统的概念模型。 ③逻辑结构设计阶段 将概念结构转换为某个数据库管理系统所支持的数据模型&am…

LCM — Least Common Multiple 最小公倍数

因为任何一个数都可以表示为若干个质数幂的乘积。 比如75 3*5*5&#xff0c;即 2^0 * 3^1 * 5^2 * 7^0 ... 那么对于两个数来说&#xff0c;gcd就是他们取每个质数的较小幂的乘积&#xff0c;lcm则相反。显然&#xff0c;这些幂加起来就是他们乘积。 gcd(a,b) * lcm(a,b) a…

C++学习/复习13--list概述

一、list概念 1.带头双向链表 2.构造函数 3.迭代器&#xff08;其迭代器需尤其注意&#xff09; 4、size 5.front/back 6.插入删除 删除时的迭代器失效 由于list的节点特殊&#xff0c;既有数据又有指针&#xff0c;其实现需要节点/迭代器/list各成一类再组合