the-way-to-go - 2. Redis 数据类型 String

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: the-way-to-go - 2. Redis 数据类型 String

Redis 数据类型 String

  1. String 是 Redis 最基本的类型,一个key对应一个value
  2. String 类型是 二进制安全 的。 意味着 Redis 的 string 可以包含任何数据。 比如jpg图片或者序列化的对象; 也可以 数字 类型进行累加操作 INCR
  3. String 类型是 Redis 最基本的数据类型,一个 Redis 中字符串 value 最多可以是 512M

基本 SET 命令

最简单的设置方式是

SET key value

但完整语法是

SET key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET]
  1. 过期时间设置

    • EX seconds : 设置 key 的时候同时设置 n 秒过期。与 SETEX 命令行为一致。 SET key100 value100 EX 20
    • PX milliseconds: 设置 n 毫秒过期, 与 EX 互斥。 SET key1 value1 PX 100
    • KEEPTTL: 保留剩余的过期时间。 不使用此参数则剩余过期时间将被覆盖。
  2. Key 存在条件

    • NX : 当 Key 不存在时生效. 与 SETNX 行为一致。
    • XX : 当 Key 存在时生效。
  3. GET: 存数据的同时取出原来的值。 如果 key 不存在返回 nil; 如果 TYPE key 不是 string 的报错。

扩展 SET 命令

  1. SETEX key value seconds: 保存 key 并设置过期时间
  2. SETNX key value: 当 key 不存在的时候生效。
  3. MSET key value [key value ...]: 同时设置多个 key-value 对

SET ... keepttl 参数 demo

127.0.0.1:6379[1]> SET k100 value EX 50
OK
127.0.0.1:6379[1]> TTL k100
(integer) 47
# 使用 KeepTTL 保留剩余过期时间
127.0.0.1:6379[1]> SET k100 value2 keepttl
OK
127.0.0.1:6379[1]> ttl k100
(integer) 28

127.0.0.1:6379[1]> set k200 value2 ex 50
OK
127.0.0.1:6379[1]> ttl k200
(integer) 41

# 没有使用 KeepTTL, 过期时间被覆盖,
127.0.0.1:6379[1]> set k200 value4
OK
127.0.0.1:6379[1]> ttl k200
(integer) -1

SET ... GET demo

127.0.0.1:6379[1]> SET key 100
OK
127.0.0.1:6379[1]> SET key 200 GET
"100"

# key 不存在返回 nil
127.0.0.1:6379[1]> SET key99 value GET
(nil)

获取值 GET and MGET

  1. GET: 获取单个 key 的值
  2. MGET: 同时获取多个 key 的值
# get
127.0.0.1:6379[1]> GET key
"200"

# mget
127.0.0.1:6379[1]> MGET key key99 key9 key200
1) "200"
2) "value"
3) "GET"
4) (nil)

字符串操作

字符串拼接: APPEND

  1. APPEND key value 在原有字符串后面拼接新的字段。 如果原 key 不存在则行为类似 set key value
127.0.0.1:6379> APPEND k9 value
(integer) 5
127.0.0.1:6379> get k9
"value"
127.0.0.1:6379> APPEND k9 1234
(integer) 9
127.0.0.1:6379> get k9
"value1234"

长度统计: STRLEN

  1. STRLEN key: 统计 key 的值的长度。
127.0.0.1:6379> get k9
"value1234"
127.0.0.1:6379> STRLEN k9
(integer) 9

片段设置 SETRANAGE and GETRANAGE

  1. SETRANGE key offset value: 从指定的 offset 位置操作片段, 替换原有片段。 如果 offset 位置比原 key 长度大, 将用 zero 占位。
  2. GETRANGE key start end: 获取指定 收尾 的字符串。 左右包含
# SetRange
127.0.0.1:6379> SET key1 "Hello World"
OK
127.0.0.1:6379>
127.0.0.1:6379> SETRANGE key1 6 "Redis"
(integer) 11
127.0.0.1:6379> GET key1
"Hello Redis"


# SetRange: 用 zero 占位
127.0.0.1:6379> SETRANGE key2 6 "Redis"
(integer) 11
127.0.0.1:6379>
127.0.0.1:6379> GET key2
"\x00\x00\x00\x00\x00\x00Redis"


# GetRange
127.0.0.1:6379> set n 0123456
OK
127.0.0.1:6379> GETRANGE n 0 3
"0123"
127.0.0.1:6379> GETRANGE n 1 3
"123"
127.0.0.1:6379> GETRANGE n 1 10
"123456"


redis> SET mykey "This is a string"
"OK"
redis> GETRANGE mykey 0 3
"This"
redis> GETRANGE mykey -3 -1
"ing"
redis> GETRANGE mykey 0 -1
"This is a string"
redis> GETRANGE mykey 10 100
"string"
redis>

算数操作

string 类型对纯数字类型的值可以进行 加减操作

  1. INCR key: 累加 1
  2. INCRBY key increment: 指定累加值。 ex: INCRBY key 10
  3. DECR key: 累减 1
  4. DECRBY key increment: 指定减少值。 ex: DECRBY key 10
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
Go
go语言中的数据类型
go语言中的数据类型
17 0
|
13天前
|
存储 缓存 NoSQL
【Go语言专栏】Go语言中的Redis操作与缓存应用
【4月更文挑战第30天】本文探讨了在Go语言中使用Redis进行操作和缓存应用的方法。文章介绍了Redis作为高性能键值存储系统,用于提升应用性能。推荐使用`go-redis/redis`库,示例代码展示了连接、设置、获取和删除键值对的基本操作。文章还详细阐述了缓存应用的步骤及常见缓存策略,包括缓存穿透、缓存击穿和缓存雪崩的解决方案。利用Redis和合适策略可有效优化应用性能。
|
1月前
|
存储 安全 Go
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
|
5天前
|
NoSQL Java Unix
Redis基础操作 String List
Redis基础操作 String List
7 0
|
13天前
|
NoSQL Shell Go
在go中简单使用go-redis库
在go中简单使用go-redis库
|
13天前
|
存储 Go 开发者
【Go语言专栏】Go语言中的变量、常量和数据类型
【4月更文挑战第30天】Go语言以其简洁、高效和并发性备受开发者喜爱。本文聚焦变量、常量和数据类型。变量声明可使用`var`或类型推断,如`var a int = 10`和`b := "hello"`。常量用`const`声明,不可变,如`const pi float64 = 3.1415926`。数据类型包括基本类型(数值、布尔、字符串)和复合类型(数组、切片、结构体、接口)。理解这些基础将助力开发者深入学习Go语言的高级特性。
|
18天前
|
存储 NoSQL 安全
Redis入门到通关之Redis数据结构-String篇
Redis入门到通关之Redis数据结构-String篇
35 1
|
18天前
|
存储 缓存 NoSQL
Redis入门到通关之String命令
Redis入门到通关之String命令
18 0
|
19天前
|
存储 消息中间件 缓存
Redis 命令全解析之 String类型
Redis 命令全解析之 String类型
15 1
|
20天前
|
Go
Golang深入浅出之-Go数据类型详解:整型、浮点型与布尔型
【4月更文挑战第20天】Go语言基础数据类型包括整型(有符号和无符号,如`int8`、`uint32`)、浮点型(`float32`、`float64`)和布尔型(`true`、`false`)。理解它们的范围和特性,以及注意溢出、精度损失、类型转换等问题,是编写高效Go代码的关键。例如,整型溢出可能导致模运算,浮点数比较可能有精度误差,布尔型不应用于数值计算。了解这些易错点,能帮助写出更健壮的代码。
27 0