1.string数据类型与结构

简介

String类型是redis的最基础的数据结构,也是最经常使用到的类型。
string 类型的值最大能存储 512MB,这里的String类型可以是简单字符串、复杂的xml/json的字符串、二进制图像或者音频的字符串、以及可以是数字的字符串。

1.1.常用命令

1.set

该命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型

Redis String 值最大存储多少 redis string类型最大_database

2.get

该命令用于获取指定 key 的值。如果 key不存在,返回 nil 。如果key对应储存的值不是字符串类型,返回一个错误

Redis String 值最大存储多少 redis string类型最大_链表_02

3.getset

该命令用于获取指定的key的旧值,然后按照新值对key进行赋值。当key中没有旧值的时候返回nil。

Redis String 值最大存储多少 redis string类型最大_字符串_03

4.mget

该命令用于返回多个key的值,当其中某一个KEY的值不存在,返回nil

Redis String 值最大存储多少 redis string类型最大_数据库_04

5.decr

对key对应的数字做减1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。

Redis String 值最大存储多少 redis string类型最大_数据库_05

6.incr

对存储在指定key的数值执行原子的加1操作,如果指定的key不存在,那么在执行incr操作之前,会先将它的值设定为0。如果指定的key中存储的值不是字符串类型(fix:)或者存储的字符串类型不能表示为一个整数,那么执行这个命令时服务器会返回一个错误

Redis String 值最大存储多少 redis string类型最大_字符串_06


1.2.string简单字符结构

SDS动态字符串

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

sds 结构:
struct sdshdr {
    int len;         // 记录buf数组中已使用字节的数量
    int free;        // 记录buf数组中未使用字节的数量
    char buf[];      // 字节数组,用于保存实际字符串
}

其中buf数组用来存储字符串,然后也会用一字节的 '\0’空字符加载我们要存储的字符串后面,如果free字段不为空,那么buf数组最后面也会包括长度为free中声明的空闲位置.

2.list数据类型与结构

简介

list类型是用来存储多个有序的字符串的,列表当中的每一个字符看做一个元素,一个列表当中可以存储有一个或者多个元素,redis的list支持存储2^32次方-1个元素。redis可以从列表的两端进行插入(pubsh)和弹出(pop)元素,支持读取指定范围的元素集,或者读取指定下标的元素等操作。redis列表是一种比较灵活的链表数据结构,它可以充当队列或者栈的角色。

redis列表是链表型的数据结构,所以它的元素是有序的,而且列表内的元素是可以重复的。意味着它可以根据链表的下标获取指定的元素和某个范围内的元素集。

2.1. 常用命令

lpush rpush

将一个或多个值插入到列表头部(尾部)。 如果 key 不存在,则创建list,然后再插入数据操作。 当 key 存在但不是列表类型时,返回一个错误。

Redis String 值最大存储多少 redis string类型最大_数据库_07

lrange

返回指定list区间内的元素。区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

Redis String 值最大存储多少 redis string类型最大_redis_08

blpop brpop

redis的list是链表结构。blpop命令正是移出列表的第一个元素。brpop是移出list列表的最后一个元素。如果list当中没有没有元素,会一直等待到超时,或者发现有数据为止。

Redis String 值最大存储多少 redis string类型最大_字符串_09

blpop list2 1 中的1是超时时间,若1s没有返回数据则返回nil。

Redis String 值最大存储多少 redis string类型最大_database_10

linsert

指的是在list列表的某一个元素前或者后插入另外一个元素。当指的的元素不存在时,不执行任何动作。如果列表不存在时,视为空列表,不执行任何动作。

Redis String 值最大存储多少 redis string类型最大_redis_11

lindex

用于通过链表的下标索引获取列表中的元素。这里的下标也可以是负数表示list的最后一个元素,-2表示倒数第二个元素

Redis String 值最大存储多少 redis string类型最大_链表_12