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。

相关推荐
大筒木老辈子20 分钟前
Linux笔记---协议定制与序列化/反序列化
网络·笔记
草莓熊Lotso28 分钟前
【C++】递归与迭代:两种编程范式的对比与实践
c语言·开发语言·c++·经验分享·笔记·其他
酷ku的森1 小时前
Redis中的Zset数据类型
数据库·redis·缓存
我爱挣钱我也要早睡!3 小时前
Java 复习笔记
java·开发语言·笔记
汇能感知8 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun8 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao9 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾9 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
利刃大大9 小时前
【高并发内存池】五、页缓存的设计
c++·缓存·项目·内存池
DKPT9 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习