当前位置: 首页 > news >正文

Redis数据结构之String

目录

    • 1.概述
    • 2.常见操作
      • 2.1 SET/GET
      • 2.2 MSET/MGET/MSETNX
      • 2.3 GETRANGE/SETRANGE
      • 2.4 INCR(BY)/DECR(BY)
      • 2.5 STRLEN
      • 2.6 APPEND
      • 2.7 GETSET
    • 3.小结

1.概述

  • String是最常用的数据类型,一个key对应一个value。
  • String是二进制安全的,可以包含任何数据(例如图片和序列化对象),支持序列化。
  • 单个Value最大512MB。

在这里插入图片描述

2.常见操作

2.1 SET/GET

语法:

[ ]是可选的参数

SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]

SET命令有EXPXNXXX以及KEEPTTL五个可选参数,其中KEEPTTL为6.0版本添加的可选参数,其它为2.6.12版本添加的可选参数。

  • EX seconds 以秒为单位设置过期时间
  • PX milliseconds 以毫秒为单位设置过期时间
  • EXAT timestamp 设置以秒为单位的UNIX时间戳所对应的时间为过期时间
  • PXAT milliseconds-timestamp 设置以毫秒为单位的UNIX时间戳所对应的时间为过期时间
  • NX 键不存在的时候设置键值
  • XX 键存在的时候设置键值
  • KEEPTTL 保留设置前指定键的生存时间
  • GET 返回指定键原本的值,若键不存在时返回nil

SET命令使用EXPXNX参数,其效果等同于SETEXPSETEXSETNX命令。根据官方文档的描述,未来版本中SETEXPSETEXSETNX命令可能会被淘汰。

EXNX可用于分布式锁。

案例:最常用的set/get

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"

案例:NX,键不存在才能创建,否则不能创建

127.0.0.1:6379> set k1 v1 nx
OK
127.0.0.1:6379> set k1 v1 nx
(nil)

案例:XX,已存在的才创建,否则不能创建

127.0.0.1:6379> set k1 v1 
OK
127.0.0.1:6379> set k1 v1 xx
OK
127.0.0.1:6379> get k2
(nil)
127.0.0.1:6379> set k2 v2 xx
(nil)

案例:GET,设置新的值前先把旧的值返回

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k1 v2 get
"v1"

案例:EX,10秒过期

127.0.0.1:6379> set k1 v1 ex 10
OK
127.0.0.1:6379> ttl k1
(integer) 8
127.0.0.1:6379> ttl k1
(integer) 6
127.0.0.1:6379> ttl k1
(integer) 4

set ex是原子操作,和先set key value然后expire key是不同的,后者不是原子的

案例:PX,9000毫秒过期

127.0.0.1:6379> set k1 v1 px 9000
OK
127.0.0.1:6379> ttl k1
(integer) 7
127.0.0.1:6379> ttl k1
(integer) 5
127.0.0.1:6379> ttl k1
(integer) 4

案例:KEEPTTL

同一个key如果设置了新的值,又没有追加过期时间,redis会令其立即过期

127.0.0.1:6379> set k1 v1 ex 40
OK
127.0.0.1:6379> ttl k1
(integer) 37
127.0.0.1:6379> set k1 v2
OK
127.0.0.1:6379> ttl k1
(integer) -1

如果需要续接过期时间,就需要用到参数KEEPTTL,设置新值后,过期时间会被续接下来

127.0.0.1:6379> set k1 v1 ex 50  
OK
127.0.0.1:6379> ttl k1
(integer) 46
127.0.0.1:6379> set k1 v1 keepttl
OK
127.0.0.1:6379> ttl k1
(integer) 33

2.2 MSET/MGET/MSETNX

案例:MSET同时设置和获取多个值

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"

案例 MSETNX,同时设置多个key的值,且key不存在才设置,只会同时成功或同时失败

失败,因为k1已经存在,k1没有成功修改,k2也根本存不进去

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> msetnx k1 a1 k2 v2
(integer) 0
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> get k2
(nil)

成功,k1,k2都不存在,全部添加成功

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> msetnx k1 v1 k2 v2
(integer) 1
127.0.0.1:6379> mget k1 k2
1) "v1"
2) "v2"

2.3 GETRANGE/SETRANGE

GETRANGE,类似Java中的substring(),字符串截取, 0到-1代表不截取

案例:

127.0.0.1:6379> set k1 abcdefg
OK
127.0.0.1:6379> getrange k1 0 -1
"abcdefg"
127.0.0.1:6379> getrange k1 1 4
"bcde"

SETRANGE,从第几个字符开始设置新的内容

案例:

127.0.0.1:6379> set k1 abcdefg
OK
127.0.0.1:6379> setrange k1 1 xxyy
(integer) 7
127.0.0.1:6379> get k1
"axxyyfg"

2.4 INCR(BY)/DECR(BY)

数值的加减,值一定要是数字才能进行这个操作

案例:INCR,每次执行加1

127.0.0.1:6379> set k1 100
OK
127.0.0.1:6379> get k1
"100"
127.0.0.1:6379> incr k1
(integer) 101
127.0.0.1:6379> incr k1
(integer) 102
127.0.0.1:6379> incr k1
(integer) 103
127.0.0.1:6379> incr k1
(integer) 104

案例:INCRBY,修改步长为5

127.0.0.1:6379> set k1 0
OK
127.0.0.1:6379> incrby k1 5
(integer) 5
127.0.0.1:6379> incrby k1 5
(integer) 10
127.0.0.1:6379> incrby k1 5

案例:DECR,递减1,DECRBY同理

127.0.0.1:6379> set k1 100
OK
127.0.0.1:6379> decr k1
(integer) 99
127.0.0.1:6379> decr k1
(integer) 98
127.0.0.1:6379> decr k1
(integer) 97

127.0.0.1:6379> set k1 100
OK
127.0.0.1:6379> decrby k1 5
(integer) 95
127.0.0.1:6379> decrby k1 5
(integer) 90
127.0.0.1:6379> decrby k1 5
(integer) 85

2.5 STRLEN

字符串长度

语法

strlen key

案例

127.0.0.1:6379> set k1 aaa
OK
127.0.0.1:6379> strlen k1
(integer) 3

2.6 APPEND

字符串追加

语法

APPEND key value

案例

127.0.0.1:6379> set k1 aaa
OK
127.0.0.1:6379> append k1 bbb
(integer) 6
127.0.0.1:6379> get k1
"aaabbb"

2.7 GETSET

getset,顾名思义,先取值在设置新的值进去,和set key value get命令相同

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> getset k1 v2
"v1"
127.0.0.1:6379> get k1
"v2"

3.小结

字符串是一个最基本的数据结构,可用于分布式锁,点赞数量统计等场景。

相关文章:

  • 商城类网站怎么推广系统优化工具
  • 软文营销的三个层面东莞seo外包公司
  • 装修平台合作网站优化排名怎么做
  • 网站开发部经理招聘北京新闻最新消息
  • 网站建设开源项目github小红书代运营
  • 百度快照 查看指定网站互联网广告销售
  • 蓝桥杯:对字符串处理常用知识笔记
  • 如何在Ubuntu上安装Dify
  • 控件主题效果添加程序设计
  • 【速写】SFT案例实操(以Qwen2.5-instruct-0.5B)
  • 24统计建模国奖论文写作框架(机器学习+图像识别类)
  • 搭建redis主从同步实现读写分离(原理剖析)
  • Day1:前端项目uni-app壁纸实战
  • Python-函数参数
  • (四)数据检索与增强生成——让对话系统更智能、更高效
  • 微软的 Copilot 现在可以浏览网页并为您执行操作
  • Qt中左侧项目菜单中构建设置功能中的构建步骤是怎么回事
  • 数字内容个性化推荐引擎构建
  • 计算机网络实验(包括实验指导书)
  • 可视化工具
  • STM32 × CLion 新建项目
  • 人工智能(AI)入门篇:什么是人工智能?什么是生成式人工智能?
  • 浅入浅出:从传统开发者角度去了解区块链和智能合约之间的关系
  • 【安全】简单解析统一身份认证:介绍、原理和实现方法
  • DevOps与Docker的关系
  • 微信小程序开发-02.准备工作