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

目录

1、Redis中String字符串

[1.1 常用命令解释:](#1.1 常用命令解释:)

[1.2 原子性](#1.2 原子性)

[1.3 具有原子性的常用命令](#1.3 具有原子性的常用命令)

[1.4 String数据结构](#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
  1. get : 获取指定键的值。

示例:

复制代码
get mykey
  1. append : 将给定的值追加到原值的末尾。

示例:

复制代码
append mykey " additional text"
  1. strlen : 获取键值的长度。

示例:

复制代码
strlen mykey
  1. setnx : 仅当键不存在时,设置键的值。

示例:

复制代码
setnx mykey myvalue
  1. incr : 将键中储存的数字值加1。只能对数字值操作,如果键不存在,则设置初始值为1。

示例:

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

示例:

复制代码
decr mycounter
  1. 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。

相关推荐
都叫我大帅哥2 分钟前
Redis的ZSet:从“青铜”到“王者”的排序神器
java·redis
小小霸王龙!15 分钟前
互联网大厂Java面试实录:Spring Boot与微服务在电商场景中的应用
java·spring boot·redis·微服务·电商
都叫我大帅哥42 分钟前
Redis BitMap 深度解剖:比特世界的精密引擎
redis
寻丶幽风1 小时前
论文阅读笔记——VGGT: Visual Geometry Grounded Transformer
论文阅读·笔记·transformer·三维重建·3dgs·vggt
zzywxc7871 小时前
如何高效清理C盘、释放存储空间,让电脑不再卡顿。
经验分享·缓存·性能优化·电脑
爱上语文2 小时前
Redis基础(4):Set类型和SortedSet类型
java·数据库·redis·后端
天水幼麟2 小时前
python学习笔记(深度学习)
笔记·python·学习
you45803 小时前
小程序学习笔记:使用 MobX 实现全局数据共享,实例创建、计算属性与 Actions 方法
笔记·学习·小程序
笑衬人心。3 小时前
初学Spring AI 笔记
人工智能·笔记·spring
UQI-LIUWJ3 小时前
计算机组成笔记:缓存替换算法
笔记·缓存