Redis 字符串(Strings) 复习

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 字符串是Redis最简单的储存类型,它存储的值可以是字符串、整数或者浮点数,对整个字符串或者字符串的其中一部分执行操作;对整数或者浮点数执行自增(increment)或者自减(decrement)操作。

介绍

字符串是Redis最简单的储存类型,它存储的值可以是字符串、整数或者浮点数,对整个字符串或者字符串的其中一部分执行操作;对整数或者浮点数执行自增(increment)或者自减(decrement)操作。

Redis的字符串是一个由字节组成的序列,采用预分配冗余空间的方式来减少内存的频繁分配,内部为当前字符串实际分配的空间capacity 一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。

应用场景

字符串类型在工作中使用广泛,主要用于缓存数据,提高查询性能。比如存储登录用户信息、电商中存储商品信息、可以做计数器(想知道什么时候封锁一个IP地址(访问超过几次))等等。

数据结构

的字符串是动态字符串,是可以修改的字符串,内部结构如图中所示,内部为当前字符串实际

字符串创建

创建单条(SET)

# SET key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp] [NX|XX] [GET]
# 过期时间(可选参数) [EX(秒) |PX(毫秒) |EXAT(时间戳) |PXAT(毫秒时间戳) ]
# 是否设置 [NX(不存在时设置)|XX(存在时设置)]
# [GET] 是否同时获取旧值
> SET test 'hello  word'
OK
# 设置过期时间为100s
> SET test1 'hello word' ex 100 
OK
# 重复设置将会更新值和过期时间
> SET test 'hello c69p.com' get
"hello word"
# 存在时设置,同时获取旧值
> SET test 'chendasheng' xx get
"hello c69p.com"


创建多条(MSET、MSETNX)

# 设置多个键的字符串值
# MSET key value [key value ...]
> MSET test2 "is test2" test3 "is test3"
OK
#  设置多个键,不存在时,设置字符串值
# MSETNX key value [key value ...]
> MSET test4 "is test4" test5 "is test5"
OK

键不存在时,设置字符串值(SETNX)

# 键不存在时,设置字符串值
# SETNX key value
> SETNX test6 "a"
(integer) 1

创建时同时设置生存时间(SETEX、PSETEX)

# 设置生存时间(秒为单位),同时设置值,存在则覆盖
# SETEX key seconds value (秒) | PSETEX key milliseconds value (毫秒)
> SETEX test7 100 "is test7"
OK

替换指定的key(SETRANGE)

# 覆盖给定 key 所储存的字符串值
# SETRANGE key offset value
> SETRANGE test6 0 "chendasheng"
(integer) 11

创建多条是原子操作,一条不成功则所有的都不成功。

查询

查询单条(GET、GETSET)

# 存在则返回,不存在返回nil
# GET key 
> GET test6
"chendasheng"
# 获取(旧)值并设置新值
# GETSET key value
> GETSET test6 "im test6"
"chendasheng"


查询多条(MGET)

# MGET key [key ...]
> MGET test1 test6
1) (nil)
2) "im test6"

查询长度(STRLEN)

# STRLEN key
> STRLEN test6
(integer) 8

查询key类型(TYPE)

# TYPE key
> TYPE test6
string

其他操作

步减/步增(INCR、INCRBY、INCRBYFLOAT、DECR、DECRBY)

# 数字值增一,不存在则新建一个
# INCR key
> INCR num
(integer) 1
# 自增增量值(increment)
# INCRBY key increment
> INCRBY num 10
(integer) 11
# 自增增量值浮点(increment)
# INCRBYFLOAT key increment
> INCRBY num 10.1
(integer) 22.1
# 数字值减一,不存在则新建一个
# DECR key
> DECR num1
(integer) -1
# 自减减量值(increment)
# DECRBY key increment
> DECRBY num1 10
(integer) -11

追加字符(APPEND)

# 追加值
# APPEND key value
> APPEND test6 1
(integer) 9

特殊string类型(bitmap)

bitmap并不是Redis一种数据结构,实际上它就是字符串,但是可以对字符串的位进行操作。bitmap一套命令。可以把bitmap想象成一个以bit为单位的数组,数组的每个单元存储0和1,数组的下标叫做偏移量

新建(SETBIT)

# offset 偏移量 value值
# SETBIT key offset value
> SETBIT bittest 0 1
(integer) 0

获取(GETBIT)

# offset 偏移量
# GETBIT key offset
> GETBIT bittest 0
(integer) 1

统计(BITCOUNT、BITPOS)

用于统计字符串被设置为1的bit数

统计指定范围为1的数量(BITCOUNT)

# 统计一个字符区间内为1的个数
# BITCOUNT key [start end]
> BITCOUNT bittest
(integer) 1

BITCOUNT是以字符为(Byte)单位,一个字符有8位bit

查找指定范围出现的第一个0或1(BITPOS)

查找指定范围出现的第一个0或1的bit位置

# bit查找的值 0 或者 1 [start] [end] 开始结束范围
# BITPOS key bit [start] [end]
> BITPOS test 1 0
(integer) 1


进行位元操作,并保存结果(BITOP)

  • ITOP AND destkey key [key …],对一个或多个key求逻辑并,并将结果保存到destkey
  • BITOP OR destkey key [key …],对一个或多个key求逻辑或,并将结果保存到destkey
  • BITOP XOR destkey key [key …],对一个或多个key求逻辑异或,并将结果保存到destkey
  • BITOP NOT destkey key ,对给定key求逻辑非,并将结果保存到destkey
# 对每bit进行运算
# BITOP operation destkey key [key ...]
> set key1 aa
OK
> set key2 bb
OK
> bitop and dest key1 key2
(integer) 2
> get dest
"``"
> bitop or dest key1 key2
(integer) 2
> get dest
"cc"


引用

Redis 爱好者-字符串

相关实践学习
基于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
目录
相关文章
|
7月前
|
存储 NoSQL 5G
redis优化编码之字符串
Redis数据结构之字符串
94 2
redis优化编码之字符串
|
7月前
|
XML JSON NoSQL
Redis的常用数据结构之字符串类型
Redis的常用数据结构之字符串类型
59 0
|
7月前
|
NoSQL 安全 Linux
Redis 字符串:SDS
Redis 字符串:SDS
80 0
|
4月前
|
存储 缓存 NoSQL
redis数据结构-字符串
redis数据结构-字符串
40 1
|
6月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
85 1
|
2月前
|
NoSQL Redis
Redis 字符串(String)
10月更文挑战第16天
47 4
|
3月前
|
存储 缓存 NoSQL
3)深度解密 Redis 的字符串
3)深度解密 Redis 的字符串
37 1
|
4月前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
4月前
|
C# 开发者 UED
WPF开发者必备秘籍:深度解析文件对话框使用技巧,打开与保存文件原来如此简单!
【8月更文挑战第31天】在WPF应用开发中,文件操作是常见需求。本文详细介绍了如何利用`Microsoft.Win32`命名空间下的`OpenFileDialog`和`SaveFileDialog`类来正确实现文件打开与保存功能。通过示例代码展示了如何设置文件过滤器、初始目录等属性,并使用对话框进行文件读写操作。正确使用文件对话框能显著提升用户体验,使应用更友好易用。
102 0
|
4月前
|
存储 NoSQL Redis
【Redis 探秘】SDS 简单动态字符串:揭秘 Redis 高效字符串处理的秘密武器!
【8月更文挑战第24天】Redis采用的简单动态字符串(SDS)是一种专为优化内存存储和字符串操作而设计的数据结构。相较于C语言的标准字符串,SDS改进了字符串长度计算、内存重分配及字符串比较等问题。其特性包括预分配冗余空间减少未来的内存重分配、显式存储长度以加快获取速度等。这些改进使Redis能更高效地管理字符串数据。例如,在Redis中,SDS被广泛应用于键值对的存储,显著提升了字符串操作的性能。了解SDS不仅对于深入理解Redis的工作原理至关重要,也是开发者技能树中的重要一环。
70 0