初识redis:String类型

在Redis中的所有key都是字符串,而value的类型是存在差异的。本文介绍的就是value中的string类型。

首先要知道,Redis中的字符串,直接就是按照二进制数据的方式存储的,不会做任何的编码转换。也就是说,redis不仅仅可以存储文本数据,还可以存整数、JSON、xml、二进制的数据(图片、视频、音频)等等。

目录

SET

GET

MSET  MGET

SETNX   SETEX   PSETEX

INCR  DECR  INCRBY  DECRBY  INCRBYFLOAT

APPEND

GETRANGE

SETRANGE

STRLEN

编码方式

String类型的应用场景


SET

我们之前简单了解过set的使用,但那只是普通的用法,而完整版是这样子的:

SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

当我们使用

set key value ex 10

的时候,相当于:

set key value
expire key 10

这样子就非常方便的设置了超时时间,并且能够节省网络带宽。

前者还是一个原子性的操作。

 为了演示方便,我们使用FLUSHALL来清空所有的key(注意!这个操作非常危险!和sql中的drop database是一样的!一定不能再生产环境中使用!)

过期时间:

后面的[NX|XX]:

NX:如果key不存在,才设置;如果key存在,则不设置(返回nil)

XX:如果key存在,才设置(相当于更新key的value);如果key不存在,则不设置(返回nil)

对于redis文档给出的语法格式说明:

[] 相当于一个独立的单元,表示可选项(可有可无的),其中 | 表示或者的意思,只能出现一个

[] 和 []是可以同时存在的。

如果key不存在,则创建新的键值对;如果key存在,则是让新的value覆盖旧的value,可能会改变原来的数据类型。

GET

对于get来说,只是支持字符串类型的value,如果value是其他的类型,使用get获取就会出错。

例如此时我们使用lpush来构造一个list类型的key,再使用get就会报错:

MSET  MGET

MGET [key ...]

MSET key value [key value ...]

和set和get类似,只不过加上了M的操作可以一次性操作多条。

并且这个操作是非常节省网络带宽的,一次可以操作多条,对于硬件资源的消耗是比较小的。

SETNX   SETEX   PSETEX

SETNX:不存在才能设置,存在则设置失败。这个命令可以用于保证键的唯一性,因为它只有在键不存在时才会设置值。

SETEX:允许同时设置一个键的值和它的生存时间

Redis 的 PSETEX 命令与 SETEX 类似,但用于设置键的值并指定过期时间,单位为毫秒。

INCR  DECR  INCRBY  DECRBY  INCRBYFLOAT

  1. INCR:

    • 命令格式:INCR key
    • 功能:将键 key 的值增加 1。如果键不存在,它将首先将键设置为 0,然后增加 1。
    • 返回值:增加后的值。
  2. INCRBY:

    • 命令格式:INCRBY key increment
    • 功能:将键 key 的值增加指定的 increment 值。如果键不存在,它将首先将键设置为 0,然后增加 increment
    • 返回值:增加后的值。
  3. DECR:

    • 命令格式:DECR key
    • 功能:将键 key 的值减少 1。如果键不存在,它将首先将键设置为 -1,然后减少 1。
    • 返回值:减少后的值。
  4. DECRBY:

    • 命令格式:DECRBY key decrement
    • 功能:将键 key 的值减少指定的 decrement 值。如果键不存在,它将首先将键设置为 -decrement,然后减少 decrement
    • 返回值:减少后的值。
  5. INCRBYFLOAT:

    • 命令格式:INCRBYFLOAT key increment
    • 功能:将键 key 的值增加指定的浮点数 increment。如果键不存在,它将首先将键设置为 increment 的值。
    • 返回值:增加后的值,浮点数格式。

INCRDECR 命令只能用于存储整数值的键,而 INCRBYDECRBY 可以用于增加或减少任意整数值,包括负数。INCRBYFLOAT 则允许以浮点数形式增加键的值。

APPEND

Redis 的 APPEND 命令用于向键(key)的现有值追加字符串值。如果键不存在,APPEND 命令会将键的值设置为给定的字符串。如果键已经存在并且类型是字符串,APPEND 命令会将字符串值追加到现有字符串的末尾。

GETRANGE

GETRANGE 命令用于获取键(key)的字符串值的一部分,即从一个指定的起始偏移量到一个指定的结束偏移量之间的子字符串。

第一个数字代表着从前往后数,第二个数代表着从后往前数。

SETRANGE

SETRANGE 命令用于用指定的字符串值替换键(key)的字符串值中的某个部分。如果键不存在,SETRANGE 会创建一个新的键,并将其值设置为指定的字符串。如果键已存在且类型为字符串,SETRANGE 会从指定的偏移量开始替换现有字符串的部分内容。

STRLEN

返回键所关联的字符串值的长度。如果键不存在或者键的值不是字符串类型,STRLEN 命令会报错。

编码方式

string 内部有三种编码方式:

  • 1.int           64位/8字节 的整数
  • 2.embstr   压缩字符串.适用于表示比较短的字符串,
  • 3.raw        普通字符串.适用于表示更长的字符串,只是单纯的持有字节数组

String类型的应用场景

应用服务器访问数据的时候,先査询 Redis。
如果 Redis 上数据存在了,就直接从 Redis 取数据交给应用服务器,不继续访问数据库了
如果 Redis 上数据不存在,再读取 MySQL,把读到的结果返回给应用服务器。同时,把这个数据也写入到 Redis 中。

这样的数据大部分都是热点数据,把用户最需要频繁读取的数据放在redis中,能极大地减缓mysql的读取写入量。

但是随着时间的推移,redis中的数据会越来越多,什么数据都往里面存的话,肯定会堆积成山。于是有几个简单的策略可以减缓这种情况:

  1. 在把数据写入到redis中的时候,给key设置一个过期时间
  2. redis在内存不足的时候,设置了一个淘汰策略

对于session会话,redis会和应用服务器相互配合,做到不同的服务器的redis数据可以共享:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值