`

浅谈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与C字符串的区别 常数复杂度获取字符串长度 O(n) O(1) 杜绝缓冲区溢出 修改字符串长度时内存重分配 空间预分配:对字符串进行增长操作时...

    redis数据结构服务器

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

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

    数据结构 数据结构Redis中数据类型对应的数据结构 中数据类型对应的数据结构 Redis Redis 是⼀种键值(Key-Value)数据库。相对于关系型数据库(⽐如 MySQL),Redis 也被叫作⾮关系型数据库。 像 MySQL 这样的关系...

    go&redis数据结构的底层实现.docx

    go&redis数据结构的底层实现.docx

    redis数据结构.pdf

    也就是说,在传统的键-值数据库 中,你把字符串键与字符串值联系起来,而在redis,值不仅限于一个 简单的字符串,还可以是更复杂的数据结构。下面列出了所有redis支 持的数据结构,下文会分别对这些结构进行介绍: ...

    Redis数据结构.pptx

    针对Redis的高级数据结构PPT。该PPT一共14页,介绍了Zset的数据结构类型,以及跳表的数据结构。简单阐述了BitMap,HLL,Bloom Filter的原理以及一些常用的指令。针对Bloom Filter有一些自己的见解以及分析

    详解redis数据结构之sds

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

    redis数据结构

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

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

    Nginx也是采用IO多路复用原理解决C10K问题# 查看redis支持的最大连接数,在redis.conf文件中可修改,# maxclients 10000其

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

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

    3.Redis数据类型之List类型

    3.Redis数据类型之List类型

    redis-cli-cs:C ++ Redis CLI客户端连接字符串(URI)连接器

    基本上,程序会解析其第一个参数/参数(即到Redis服务器的连接字符串(URI)),然后启动带有适当参数的redis-cli程序以连接到Redis服务器。 安装 该程序在可使用redis-cli(redis-tools)客户端的UNIX系统上运行。...

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

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

    Redis基础数据结构.pptx

    详细分析redis设计及实现原理 详细分析redis设计及实现原理

    redis内部数据结构之SDS简单动态字符串详解

    reids 没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组)而是构建了一种名为简单动态字符串的抽象类型,并为redis的默认字符串表示,因为C字符串不能满足redis对字符串的安全性、效率以及功能方面的需求...

    redis可视化客户端工具

    新的redis数据:字符串,列表,哈希,集,有序集合 重命名redis数据 删除redis数据 更新Redis数据 剪切,复制粘贴redis数据 导入,导出redis数据 搜索redis数据 数据类型为重点,redis数据,大小 导航历史...

    详解redis数据结构之压缩列表

    详解redis数据结构之压缩列表 redis使用压缩列表作为列表键和哈希键的底层实现之一。当一个列表键只包含少量的列表项,并且每个列表项都是由小整数值或者是短字符串组成,那么redis就会使用压缩列表存储列表项;同理...

    redis视频下载地址(百度云)

    Redis_安装_字符串键_1.mp4 Redis_安装_字符串键_2.mp4 Redis_安装_字符串键_3.mp4 Redis_字符串键_BitMap操作_1.mp4 Redis_字符串键_BitMap操作_2.mp4 Redis_字符串键_BitMap操作_3.mp4 Redis_字符串键_BitMap操作_...

Global site tag (gtag.js) - Google Analytics