`

浅谈redis数据结构之字符串

阅读更多

1. 前言

       在上一篇的文章:浅谈redis数据结构,对redis中的数据结构(字符串,列表,hash,集合,有序集合)做了简单的介绍,本篇就是针对字符串做详细的描述。

 

2. 字符串(string)

      字符串类型是Redis最基础的数据结构。字符串类型的值实际可以是字符串(简单和复杂的字符串,例如:JSON、XML)、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。Redis中关于字符串的命令如下所示:

 

2.1 常用命令

 

命令 说明
set key value [ex seconds] [px milliseconds] [nx|xx] 设置值。ex seconds:为键设置秒级过期时间;px milliseconds:为键设置毫秒级过期时间;nx:键必须不存在,才可以设置成功,用于添加;xx:与nx相反,键必须存在,才可以设置成功,用于更新。
setex key seconds value 设定键的值,并指定此键值对应的 有效时间。
setnx key value 键必须不存在,才可以设置成功。如果键已经存在,返回0。
get key 获取值,如果要获取的 键不存在,则返回 nil(空)。
mset key value [key value ...] 批量设置值
mget key [key ...] 批量获取值
incr key 计数

 

 

2.2 不常用命令

 

命令 说明
append key value  追加值
strlen key 字符串长度
getset key value 设置并返回原值
setrange key offeset value 设置指定位置的字符
getrange key start end 获取部分字符串

 

        在这些命令中,其中批量操作的命令,是可以有效地提高开发效率地。我们做个简单的对比:

  • 不采用批量操作

        如下图所示:

 

没有mget这样的命令,要执行n次get命令的过程和耗时:n次get时间 = n次网络时间 + n次命令时间。

  • 采用批量操作

如下图所示:

 

使用mget命令后,执行n次get命令的过程和耗时:n次get时间 = 1次网络时间 + n次命令时间。

       Redis可以支撑每秒数万的读写操作,但这指的是Redis服务端的处理能力,对于客户端来说,一次命令除了命令时间还是有网络时间。假设网络时间为1毫秒,命令时间为0.1毫秒(按照每秒处理 1 万条命令算),那么执行1000次get命令和1次mget命令的区别如表所示:

操作 时间
1000次get操作 1000 * 1 + 1000 * 0.1 = 11000ms = 1.1s
1次mget操作 1 * 1 + 1000 * 0.1 = 0.101s

 

 

2.3 时间复杂度及内部编码

 

字符串类型的内部编码有3种:

  • int,8个字节的长整型
  • embstr,小于等于39个字节的字符串
  • raw,大于39个字节的字符串

Redis会根据当前值的类型和长度决定使用哪种内部编码实现。

 

3. 应用场景

  • 缓存

       上图是一种比较典型的缓存使用场景,其中Redis作为缓存层,MySQL作为存储层,绝大部分请求的数据都是从Redis中获取。由于Redis具有支撑高并发的特性,所以缓存通常能起到加速读写和降低后端压力的作用。

 

  • 计数

       许多应用都会使用Redis作为计数的基础工具,它可以实现快速计数、查询缓存的功能,同时数据可以异步落地到其他数据源。一般来说,视频播放数系统,就是使用Redis作为视频播放数计数的基础组件,用户每播放一次视频,相应的视频播放数就会自增1。

 

  • 共享Session

       一个分布式Web服务将用户的Session信息(例如:用户登录信息)保存在各自的服务器中。这样会造成一个问题,出于负载均衡的考虑,分布式服务会将用户的访问均衡到不同服务器上,用户刷新一次访问可能会发现需要重新登录,这个问题是用户无法容忍的。如下图所示:

 

       为了解决这个问题,可以使用Redis将用户的Session进行集中管理。在这种模式下,只要保证Redis是高可用和扩展性的,每次用户更新或者查询登录信息都直接从Redis中集中获取。如下图所示:

 

  • 限速

       很多应用出于安全的考虑,会在每次进行登录时,让用户输入手机验证码,从而确定是否是用户本人。但是为了短信接口不被频繁访问,会限制用户每分钟获取验证码的频率。

 

4. 后续

       下一篇文章,我们研究下redis中列表数据结构:浅谈redis数据结构之列表

 

分享到:
评论

相关推荐

    Redis中的动态字符串学习教程

    在Redis中,字符串对象是关键数据类型之一,而`sds`被用来实现这些对象,尤其是在存储和处理字符串值时。`sds`不仅用在数据库键值对的字符串值上,还作为内部程序中的`char*`替代品,提供更高级的功能和优化的性能。...

    Redis数据结构与对象总结

    Redis数据结构与对象总结 数据结构与对象 简单动态字符串 SDS简介 SDS与C字符串的区别 常数复杂度获取字符串长度 O(n) O(1) 杜绝缓冲区溢出 修改字符串长度时内存重分配 空间预分配:对字符串进行增长操作时...

    redis数据结构服务器

    Redis是一款开源的、高性能的...Redis的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。 对于这些数据类型,你可以执行原子操作

    Redis基础架构与数据类型 Redis键值操作与命令 Redis字符串与列表数据结构 Redis哈希与集合数据结构

    Redis字符串与列表数据结构 Redis哈希与集合数据结构 Redis排序集合与使用场景 Redis持久化策略与RDB Redis持久化策略与AOF Redis主从复制与集群配置 Redis事务与Lua脚本 Redis性能优化与监控 Redis内存管理与优化 ...

    redis基础数据结构讲解

    Redis支持多种数据类型,本篇文章将对Redis的基础数据结构进行讲解,包括string(字符串)、list(列表)、set(集合)、hash(哈希)以及zset(有序集合)。掌握这些基础数据结构对使用Redis至关重要。 首先,字符...

    01-VIP-Redis核心数据结构与核心原理1

    Redis是一款高性能的键值存储系统,它以其丰富的数据结构、高效的数据操作以及强大的持久化机制在现代互联网架构中扮演着重要角色。本篇文章主要探讨Redis的核心数据结构和核心原理,以及如何利用IO多路复用技术处理...

    小林的图解系列之一,图解redis数据结构

    1. SDS(Simple Dynamic String):Redis中的字符串默认采用SDS结构,它是一种动态字符串,提供了更安全、高效的字符串操作,并且能精确计算字符串长度,避免了C语言中字符串操作的潜在问题。 2. 双向链表:在早期...

    Redis 数据结构1

    Redis 是一个高性能的键值存储系统,它的数据结构设计是其高效性和灵活性的关键。Redis 的底层网络模型采用单线程配合epoll事件模型,这使得所有命令的执行是串行的,避免了多线程的上下文切换开销,但同时也意味着...

    redis数据结构.pdf

    1. **二进制安全字符串**:Redis 的键和字符串值都是二进制安全的,这意味着可以存储任何类型的数据,包括纯文本、图片或其他二进制数据。键可以是任意长度的二进制序列,但过长的键不推荐使用,以节省内存并提高...

    数据结构Redis中数据类型对应的数据结构.pdf

    在Redis中,键的数据类型始终是字符串,而值的数据类型包括字符串、列表、字典、集合和有序集合。 1. 字符串(String):这是最基础的数据类型,对应数据结构是简单的字符串。在Redis中,字符串可以用来存储各种...

    redis字符串类型_动力节点Java学院整理

    Redis字符串类型是Redis数据库中最基础的数据结构之一,用于存储单个值。在Redis中,字符串类型不仅限于简单的文本,还可以表示整数或其他简单的数据。本文将深入探讨Redis如何存储和处理字符串类型。 首先,Redis...

    redis数据结构基础知识及案列(每个数据结构一个案例).zip

    在Redis中,数据结构不仅仅是简单的字符串、整数或哈希,还包括了集合、有序集合、链表、位图等多种类型。这些数据结构的高效实现是Redis能够处理大量并发请求的关键。下面将详细阐述Redis中的主要数据结构及其应用...

    详解redis数据结构之sds

    详解redis数据结构之sds  字符串在redis中使用非常广泛,在redis中,所有的数据都保存在字典(Map)中,而字典的键就是字符串类型,并且对于很大一部分字典值数据也是又字符串组成的。以下是sds的具体存储结构: ...

    redis数据结构

    自己整理的redis自定义的数据结构,对理解redis运行的内部原理会有所帮助

    Redis开发-redis数据结构基础知识及案列(每个数据结构一个案例).zip

    Redis开发-redis数据结构基础知识及案列(每个数据结构一个案例) redis数据结构基础知识及案列(每个数据结构一个案列) 案例清单 String案例:使用String字符串保存用户对象 List 案例:使用list保存爬虫待爬取...

    Redis工具类,工具类封装了基本的 Redis 操作,如字符串、哈希表、列表、集合的处理以及分布式锁的实现

    工具类封装了基本的 Redis 操作,如字符串、哈希表、列表、集合的处理,还包括了分布式锁的实现。这种封装不仅提高了代码的可读性和可维护性,还减少了重复代码的编写。 1、字符串操作 get(key)、set(key, value)、...

    十五分钟介绍-Redis数据结构.pdf

    以下是对Redis数据结构的详细介绍: 1. 字符串(String) 字符串是最基础的数据类型,可以存储任意二进制数据,最长可达1GB。你可以通过`SET`命令设置键值,`GET`命令获取键值。此外,Redis还提供了原子递增`INCR`、...

    使用SDS代码结构实现Redis字符串的编写.docx

    尽管Redis是用C语言编写的,但它并没有直接使用C语言的字符串类型,而是自定义了一种名为“简单动态字符串”(Simple Dynamic String,简称SDS)的数据结构。 #### SDS的核心结构 SDS的核心结构可以通过以下结构体...

    redis五大数据结构操作指令详细说明

    String 是 Redis 中最基本的数据结构,可以存储字符串、整数或浮点数。String 的操作指令包括: * GET:返回 key 所关联的字符串值。 * SET:设置 key 的值为 value。 * DEL:删除 key。 * APPEND:将 value 追加到...

    01-Redis核心数据结构实战与高性能原理剖析-ev.rar

    01-Redis核心数据结构实战与高性能原理剖析_ev.rar01-Redis核心数据结构实战与高性能原理剖析_ev.rar01-Redis核心数据结构实战与高性能原理剖析_ev.rar01-Redis核心数据结构实战与高性能原理剖析_ev.rar01-Redis核心...

Global site tag (gtag.js) - Google Analytics