redis基本数据类型string

redis实验环境

针对学习redis 我们可以为您提供一套完善的学习环境
点击此处跳转

章节叙述

本章节我们开始介绍Redis的基本数据类型,首先介绍的是Sring类型,首先键都是字符串类型的,而且其他几种数据结构都是在字符串类型基础上构建的,所以字符串能为其他四种数据结构的学习奠定基础。 如图所示,字符串类型的值实际可以是字符串(简单的字符串,复杂的字符串(例如 JSON XML ),数字(整数,浮点数),甚至二进制(图片,音频,视屏))但是值最大不能超过 512MB

string数据结构

常用命令

我们这里只介绍一些详细的命令,在本章节的附件中提供了String类型所有的命令,以及示例。

  1. 1,单个设置值,获取值

    Redis可以通过set命令来创建一个String类型的键值对:

    set key value
    

    我们可以通过get命令来获取我们保存的数据:

    get key
    

    我们也可以为我们的数据设置过期事件,我们只需要在set命令后添加EX[过期时间]

    set key value ex 5
    

    这里的时间单位是秒,我们可以等待5秒之后再去查询,就会发现get key的结果为(nil)这个意思是不存在的意思。

    当然我们也可以使用毫秒为单位来设置过期时间,如果我们希望使用毫秒作为过期的时间,我们需要使用px

    set key value px 5000
    

    有些情况下,我们希望设置一个具体的时间,比如说2021-12-31 23:59:59, 很可惜我们不能直接使用这个时间,我们需要用所谓的时间戳。时间戳是计算机用来表达时间的一种方式,它是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。2021-12-31 23:59:59用时间戳表示就是:1640966399:

     set key value EXAT 1640966399
    

    这样,我们键为key的这个数据会在2021-12-31 23:59:59到了后过期。

    同样,我们也可以设置毫秒级别的到期时间,这样会更加准确一些,毫秒级别的到期时间用的是PXAT

    set key value PXAT 1640966399000
    

    有时候为了避免覆盖已经存在的数据,我们可以在设置数据的时候,增加一个NX的标志,NX也就是NOT EXISTS的意思。这时候如果我们准备保存的键值对在Redis数据库中已经存在,它就会报错

    set key value NX
    

    NX相反的是,还有一个标志是XX,它的作用是要求这个键必须存在:

    set key-not-exist value XX
    

    (nil)的意思就是没有成功的意思。

    相反,我们重新设置一下键为key的值:

     set key new-value XX
    

    当然,Redis也为我们提供了语法糖,比如set key value NX 等价于setnx key value,set key value XX等价于setxx key value

  2. 2,批量设置值,获取值

    Redis提供了mset来批量创建多个键值对:

    mset demo1 dsds demo2 dededed demo3 ededede
    

    它会返回你创建成功的个数。同时 Redis也提供了mget用于批量获取值,我们可以用来获取获取我们刚刚存储的所有值:

    mget demo1 demo2 demo3
    

    批量操作可以有效的提高开发效率,可以替换n次的get命令的操作,下述我们简单做了两种命令的时间消耗对比

    操作时间
    1000次get1000 * 1+1000 * 0.1=1000毫秒=1.1秒
    1次mget(组装1000和键值对)1*1+1000 * 0.1=101毫秒=0.101秒

    *需要的注意的是每次批量操作所发送的命令数不是无节制的,如果数量过多可能造成 Redis 阻塞或者网络阻塞。

  3. 3,计数

    我们在开头的时候了解到String类型可以存储整数或者浮点数,Redis对于值的类型为整数或者浮点数的键值对,提供了计数的相关命令,可以对值进行递增,递减的操作。

    给大家介绍的是incr命令,它可以对值进行递增的操作。我们先来试一下:

     incr demo1
    

    我们对刚刚存储的键为demo1进行了递增的操作,这个报错信息意思是,类型不符合。这是因为我们刚刚存储的值不是数字类型的,我们重新存储一个键值对,再试一下:

     set incr1 1
    
    incr incr1
    

    可以看到这次返回的是递增成功之后的值。这个指令也可以直接新建一个键值对,并且对它进行递增操作

    我们先判断incr3这个键是否存在

    exists incr3
    

    确定不存在之后我们直接incr操作

    incr incr3
    

    我们递增了一个不存在的键,它会先创建一个键值对值为0,随后对这个键值对进行递增的操作,返回递增后的结果。

内部编码

接下来我们来了解一下字符串类型的内部编码。

  • 1,int:8个字节的长整型

  • 2,embstr:小于等于39个字节的字符串

  • 3, raw:大于39个字节的字符串

Redis会根据你存储的值的字符串长度,选取合适的内部编码实现。这里我们只做一下基础的了解。

常见使用场景
  1. 1.缓存功能

    Redis 具有支撑高并发的特性,所以一些热点信息使用缓存,可以起到加速读写和降低后端压力的作用

    例如,存储用户信息,商品信息等一些热点信息。一般采用 Json 格式存储

  2. 2.计数

    很多应用会使用 Redis 作为计数的基本工具,它可以实现快速计数,查询缓存的功能。同时数据可以异步落地到其他持久化的数据源。

    例如:电商系统中,商品的浏览量,购买量等都是以天为单位 在 Redis 中计数,然后使用定时任务同步到 ES 分布式搜索引擎 或者 Mysql 中持久化保存。

  3. 3.共享Session

    分布式 Web 服务为了 实现单点登录 可以采用 分布式 Session共享的方式实现。其原理就是将用户的 Session 进行集中管理,而不是分布在各个服务端 进行管理如图:

    redis 集中管理session

  4. 4.限速,降频

    Redis 可以给指定 key 设置过期时间,通过检查指定 key 的存在情况,可以实现一下定时的业务场景。

    例如:常见的 app 进行短信登录的时候会对多次短信发送,做时间间隔的操作,常见的实现方式,发送短信之前,在 Redis 中查看上次发送的短信是否过期。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值