String类型

          String类型是Redis的最基础类型,最大能存储512MB,其中存储值可以是最简单的字符串、复杂的 xml/json的字符串、二进制图像或者音频的字符串、以及是数字的字符串。
## String数据类型与结构

  1.  基本操作

       set 命令操作
             - set key value [ex | px | nx | xx] 
             - ex:设置key过期时间为 N 秒
             - px:设置key过期时间为 N 毫秒
             - nx:当键不存在时才对键进行设置操作
             - xx:当键存在时才对键进行设置操作
             
    setnx 命令
            当key不存在的时候才可以怼键进行设置
            若key已经存在,则不做任何操作
             
     setex 命令
             将key设置值,并且同时设置key有效时间为seconde秒钟
             如果key存在,则会覆盖掉原来的值
     
     psetx命令
             与setex命令差不多。但这是设置key有效时间为毫秒

get 命令
            获取键的值。如果值不存在。则返回nil。如果值是非字符串。则返回一个错误

    getset 命令

             设置key的值为value,并返回被设置之前旧的值

strlen

             获取key的值的字符串长度

append

             当key存在时,在指定key字符串后面追加新的字符串。当key不存在时,则新增一个key,       值为追加字符串。执行成功后返回字符串长度。

incr 命令

             当key不存在时,新增一个key并默认设置值为。当key存在时先初始化值为0后执行incr操作,则当前值自动 +1;值可以为负数,为负数时则执行减操作

incrby 命令
                执行操作与incr一样。不同的地方在于,incrby可以自定义增加值的大小。。值为任意数字。当值不是数字时。则返回一个错误

incrbyfloat

                为key值加上浮点型数量

decr

incr差不多。不同的是,每执行一次,值减1;可负数。当存储的值不能解析为数字时,则返回一个错误

decrby

                将key值的数量减去1;当key不存在时,首先初始化值为0,在执行decrby操作,可负数。当执行key存储值为非数字时,则返回一个错误

        mset 命令

                可以同时为多个key设置值。mset key value [key value key value,...]

        msetnx 命令

                当所有key不存在时,则为所有给定键设置值。当给定值只有一个已经存在时,命令会拒绝所有给定值设置值操作。msetnx属于原子性操作。要么全部设置成功。要不就全部不做设置。不可能出现第三种情况。

        mget 命令

                返回给定一个key或多个key的值。当给定key里某个key不存在时。则

     2. string动态字符串结构

        SDS(简单动态字符串),是Redis的一种基本数据结构。主要用于存储字符串和整数。


java Redis存string有反斜杠 redis string存储结构_redis


struct sdshdr {
    #len代表buf数组中已使用的字符长度
    int len;
    #free代表buf数组中未使用的字符长度
    int free;
    #buf是数组,注意末尾保存了一个空字符 ‘\0’
    char buf[];
};


共有5种类型的SDS:

1.Sdshdr5

2.Sdshdr8

3.Sdshdr16

4.Sdshdr32

5.Sdshdr64

我们可以再SDS种新增一个type字段来标识类型。具体可以向带翅膀的猫学习数据结构源码解析SDS

 String类型应用场景

  1. Session共享-Session分散管理
  2. Session共享-Redis集中管理Session
  3. 计数器-商品浏览量
  1. String类型里的incr和decr命令的作用是将存储中的数字值加1或减1.这两个具有原子性,总能安全的进行加减操作。可以用作技术,一般用于评论数,点赞数,收藏数,分享数,销量,评价数等。
  1. 限速
  1. 很多应用登录时,处于返券考虑会让用户进行短信验证,从而确认是否本人操作。但是为了短信接口不被频繁访问,会限制用户一定时间内的访问次数。

List类型

        list是可以存储多列有序的字符串,按照插入顺序排序,它可以在列表的头部添加数据,可以从列表的尾部添加数据。也可以从头部进行取数据。甚至可以从尾部进行取数据。一个列表对多可以包含 

java Redis存string有反斜杠 redis string存储结构_数据库_02

- 1 个元素

List数据类型与结构

List类型结构实现主要依据是什么?

        1.链表

                

java Redis存string有反斜杠 redis string存储结构_缓存_03

        2.压缩列表

                压缩列表的构成

java Redis存string有反斜杠 redis string存储结构_缓存_04

Zlbytes:压缩列表占用的内存字节数

Zltail:压缩列表尾节点距离起始地址又多少字节

Zllen:压缩列表字节点数

entryX:压缩列表节点

Zlend:压缩列表末端

                压缩列表节点的构成

java Redis存string有反斜杠 redis string存储结构_缓存_05

Pervious_entry_length:压缩列表前一个节点的长度

Encoding:当前节点的值类型与长度

Content:当前节点值

                 压缩列表的遍历(表尾到表头)

java Redis存string有反斜杠 redis string存储结构_List_06

 

List类型应用场景

1.秒杀抢购

        需要解决问题:

1.商品超卖

        2.同时抢购产生高并发

        3.恶意请求

2.排行榜

        商品每日销量,学生月考排名,主播年终排名等