Redis数据类型:字符串和列表

目录

string字符串类型

SET和GET

存储字符串的编码方式

List列表类型

PUSH和POP


      Redis作为一个轻量级键值数据库,跟之前上课时学的关系型数据库不同,使用Redis进行数据存储服务时,我们不需要去担心存储模式和表的结构,不需要用SQL语句来操作里面的数据,而是直接使用API操作数据结构。Redis支持的数据结构有字符串类型、列表类型、哈希类型和集合类型等,接下来的日志就总结下以前学习Redis的过程,从基本的Redis数据类型开始。

 

string字符串类型

SET和GET

首先是string字符串类型,我们都知道Redis是键值存储形式的数据库,其中所有的键都必须是字符串类型,如果我们想将一个字符串数据关联到一个键上,可以用SET命令,例如

SET “s1” “hello”

前面的“s1”是键key,后面的“hello”是值value,如果SET命令执行成功就会返回OK,接着就可以使用命令GET,根据存储时绑定的键获取值:

Redis数据类型:字符串和列表_第1张图片

如果我们用GET命令获取一个Redis中不存在的键时,就会返回nil。当我们想修改某一个字符串时,可以用APPEND命令,下面会讲到,如果想整个覆盖掉,换一个全新的字符串,可以直接用SET命令设置该键的字符串来完成覆盖。

      有时候我们在创建新的字符串时,会不小心通过SET命令覆盖掉之前已经存在的键的值,想要避免这种情况,可以选择使用SETNX命令,它会在创建时检查键是否存在,如果不存在,就会成功设置键值对并返回1,如果键已经存在,就会返回0且不会覆盖掉原来键对于的值:

Redis数据类型:字符串和列表_第2张图片

由于键s1已经存在,值是我们之前设置的”hello zyrld”,所以SETNX命令返回0,通过GET命令也可以看到原来的字符串没有被覆盖为”hello world”。之后使用SETNX设置不存在的键时返回1,表示创建成功。

      与SET和GET相关的命令还有MSET和MGET,功能是可以通过MSET一次性创建多个键的值,MGET一次性获取多个键的值:

Redis数据类型:字符串和列表_第3张图片

使用MSET和MGET的好处是可以在一次客户端和服务器的通信中设置或者获取多条信息,减少网络开销,不用发送多次SET和GET命令。

一些其他的操作字符串的命令还有:APPEND在字符串最后拼接字符串、STRLEN返回字符串的长度以及SETRANGE覆盖字符串等:

Redis数据类型:字符串和列表_第4张图片

      首先是APPEND命令,APPEND “s1” “ world”表示在键为s1的字符串后面拼接” world”字符串,并返回成功执行后新的字符串长度,如果命令中的键值不存在,例如放了“s2”,那么Redis会先创建“s2”键和一个空的字符串关联起来,再拼接后面的字符串进去。STRLEN “s1”直接返回该键s1关联的字符串的长度,可以看到和APPEND命令返回的字符串长度相同都是11。SETRANGE命令可以从字符串指定的位置开始覆盖字符串(字符串下标从0开始),覆盖完成后返回新的字符串长度。

 

存储字符串的编码方式

      关于字符串数据类型再简单总结一下关于其在Redis内部的编码方式,一共有三种:

  1. int类型:用来编码可以通过64位有符号整数表示的字符串。
  2. embstr类型:用来编码长度小于或等于44字节的字符串。
  3. raw类型:用来编码长度大于44字节的字符串。

Redis数据类型:字符串和列表_第5张图片

 

List列表类型

PUSH和POP

列表也是Redis中常用的一种数据结构,因为栈和队列都可以通过列表实现,列表里可以存储一组对象,然后与一个键相关联起来,使用列表时无需先创建一个空的列表,因为当我们向一个不存在的列表中插入元素时,Redis为首先为我们创建空列表并和键关联,同样的,我们也不用手动删除空列表的键,因为Redis会自动回收。来看列表的元素插入命令,有三条:RPUSH、LPUSH和LINSERT,它们在插入成功后都会返回新列表的长度:

Redis数据类型:字符串和列表_第6张图片

      首先LPUSH命令向键为music_list的列表左端插入两个字符串元素”song_1”和”song_2”,这样Redis会自动创建一个空的列表并和music_list关联起来,接着RPUSH命令向列表的右端插入两个元素”song_3”和”song_4”,完成后可以用LRANGE命令来获取列表中所有的元素。这个LRANGE命令后面的0 -1两个参数表示的是什么意思呢?它表示的是整个列表,因为在Redis中索引是这样表示的,从左到右的方式索引是0到N-1,从右到左的方式索引是-1到-N,所以整个列表就是0到-1来表示。

      第三条插入命令是LINSERT,它可以将元素插入到列表中指定元素的前面或后面,如上图AFTER “song_1”表示在”song_1”后面插入元素。Redis还提供了一个LSET命令,更直接地向列表中指定索引位置设置元素。最后还有两条命令,LPUSHX和RPUSHX,和前面的SETNX类似,这两条指令只有在列表存在时才能将元素插入到列表中:

Redis数据类型:字符串和列表_第7张图片

向不存在的列表中插入元素时,插入失败返回0,插入成功后返回新列表的长度。

      有插入就有弹出,从列表左端or右端弹出元素的命令很容易联想到就是LPOP和RPOP,两者在成功执行后会返回弹出的元素值,如果对一个不存在的列表操作则返回nil。如果想一次性删除多个元素,还可以用LTRIM命令,只需在后面提供需删除的索引即可:

Redis数据类型:字符串和列表_第8张图片

 

你可能感兴趣的:(Redis,数据类型)