redis 常用数据类型

一、String字符串

(一)、简介

1.String是Redis最基本的类型,可以理解成与Memcached(另一个NOSQL)一模一样的类型,一个key对应一个value。
2.String类型是二进制安全的。意味着Redis的String可以包含任何数据。比如jpg图片或者序列化的对象等。
3.String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M。

(二)、String字符串常用命令

1.set <key> <value> : 添加键值对(当你设置的key存在于数据库中,执行本命令后会覆盖指定 key 的 value )
2.get <key> : 查询对应键值
3.append <key> <value> : 将给定的 value 追加到原值的末尾,返回字符串的长度。(若 key 不存在,则创建)
4.strlen <key> : 获得 key 的长度
5.setnx <key> <value> : 只有在 key 不存在时才能设置 key 的值。(区别于set的覆盖操作)
6.incr <key> : 将 key 中储存的数字值增1   只能对数字值操作,如果为空,新增值为1
7.decr <key> : 将 key 中储存的数字值减1   只能对数字值操作,如果为空,新增值为-1
8.incrby/decrby <key> <步长> : 将 key 中储存的数字值增减。自定义步长(步长就是一个数字,你设置几它就加/减几)9.mset <key1> <value1> <key2> <value2> ..... : 同时设置一个或多个 key-value 键值对
10.mget <key1> <key2> <key3> ..... : 同时获取一个或多个 value
11.msetnx <key1> <value1> <key2> <value2> ..... : 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
	注:此命令遵循原子性,有一个失败则都失败
12.getrange <key> <起始位置> <结束位置> : 获得值的范围,类似java中的substring(包前包后)
13.setrange <key> <起始位置> <value> : 用 value 覆写 key 所储存的字符串值,从<起始位置>开始(索引从0开始)14.setex <key> <过期时间> <value> : 设置键值的同时设置<过期时间(单位秒)>15.getset <key> <value> : 以新换旧,设置了新值同时获得旧值。

*详细操作

1.添加键值对(当你设置的key存在于数据库中,执行本命令后会覆盖指定 key 的 value )

set <key> <value>

在这里插入图片描述
(对应若已有指定 key 则覆盖)
在这里插入图片描述
2.查询对应键值

get <key>

在这里插入图片描述

3.将给定的 value 追加到原值的末尾,返回字符串的长度。(若 key 不存在,则创建)

append <key> <value>

在这里插入图片描述

(对应 key 不存在,则创建)
在这里插入图片描述
4. 获得 key 的长度

strlen <key>

在这里插入图片描述
5. 只有在 key 不存在时才能设置 key 的值。(区别于set的覆盖操作)

setnx <key> <value>

在这里插入图片描述
(对应setnx无法设置已存在的key的value值)
在这里插入图片描述
6. 将 key 中储存的数字值增1 只能对数字值操作,如果为空,新增值为1

incr <key>

在这里插入图片描述
(对应若key不存在则新建为1)
在这里插入图片描述
7. 将 key 中储存的数字值减1 只能对数字值操作,如果为空,新增值为-1

decr <key>

在这里插入图片描述
(对应若 key 为空则新建为负一)
在这里插入图片描述
8. 将 key 中储存的数字值增减。自定义步长(步长就是一个数字,你设置几它就加/减几)。

incrby/decrby <key> <步长>

在这里插入图片描述
9.同时设置一个或多个 key-value 键值对(若库中已存在 key 则覆盖此 key 的value)

mset <key1> <value1> <key2> <value2> ..... 

在这里插入图片描述
10. 同时获取一个或多个 value(若获取库中不存在的key 返回值为nil)

mget <key1> <key2> <key3> .....

在这里插入图片描述
11.同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

msetnx <key1> <value1> <key2> <value2> ..... 
	注:此命令遵循原子性,有一个失败则都失败

在这里插入图片描述
(当有一个 key 已存在则添加失败)
在这里插入图片描述
12. 获得值的范围(索引都是0开始),类似java中的substring(包前包后)

getrange <key> <起始位置> <结束位置>

在这里插入图片描述
13. 用 value 覆写 key 所储存的字符串值,从<起始位置>开始(索引从0开始)。

setrange <key> <起始位置> <value>


因为是覆写,当你的value长度小于要覆写的key的起始位置到结束位置的长度时,他只会覆写value长度的值,而后边的值则不做修改;若长度大于则完全修改。
14. 设置键值的同时设置<过期时间(单位秒)>。

setex <key> <过期时间> <value>

在这里插入图片描述
key 过期后就没了,再去查询它的时候就是nil
15.以新换旧,设置了新值同时返回旧值。

getset <key> <value>

在这里插入图片描述

(三)、String的数据结构

String的数据结构为简单动态字符串(Simple Dynameic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。
在这里插入图片描述
如图中所示,内部为当前字符串时及分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M,扩容是一次只会多扩容1M的空间。需要注意的是字符串最大长度为512M。

SDS其实就可以理解为动态数组?

二、List列表

(一)、List列表的简介

1.单键多值:一个 key 对应多个 value。
2.是一个简单的字符串列表,按照插入的顺序排序。可以通过命令添加一个元素到列表的头部或尾部。
3.底层实际是一个双向链表(通过头找它的下一个元素,可以找到列表的尾部,反之也可以找到头部),对两端的操作性能很高,通过索引下标,操作中间的节点性能会较差。

(二)、List列表常用命令

1.lpush/rpush  <key><value1><value2><value3> .... 从左边/右边插入一个或多个值。
2.lpop/rpop  <key>		        从左边/右边吐出一个值。值在键在,值光键亡。
3.rpoplpush  <key1> <key2><key1>列表右边吐出一个值,插到<key2>列表左边。
4.lrange <key> <start> <stop>   按照索引下标获得元素(从左到右)	当start stop为0 -1时表示获取所有(0左边第一个,-1右边第一个)
5.lindex <key><index>		按照索引下标获得元素(从左到右)
6.llen <key>				获得列表长度
7.linsert <key>  before <value> <newvalue><value>的前面插入<newvalue>插入值
8.linsert <key>  after <value> <newvalue><value>的后面插入<newvalue>插入值
9.lrem <key><n><value>			从左边删除n个value(从左到右)
10.lset<key><index><value>		将列表key下标为index的值替换成value
	

*详细操作

1.从左边/右边插入一个或多个值。

lpush/rpush <key> <value1> <value2> <value3> .... 

左边插入三个值因为使用的是头插法所以查询出来的结果是 w3 w2 w1
在这里插入图片描述
右边同理
在这里插入图片描述
2.从左边/右边吐出一个值。值在键在,值光键亡。

lpop/rpop <key>		        

lpop
在这里插入图片描述
rpop
在这里插入图片描述
当吐完所有值后(值在键在,值光键亡)
在这里插入图片描述
3.从 key1 列表右边吐出一个值,插到 key2 列表左边。

rpoplpush <key1> <key2>		

操作前,结构为
在这里插入图片描述
操作命令
在这里插入图片描述
操作后
在这里插入图片描述
4.按照索引下标获得元素(从左到右) 当 start stop为0 -1时表示获取所有(0左边第一个,-1右边第一个)

lrange <key> <start> <stop>   

在这里插入图片描述
5.按照索引下标获得元素(从左到右)

lindex <key> <index>		

在这里插入图片描述
6.获得列表长度

llen <key>				

在这里插入图片描述
7.在 value 的前面插入 newvalue 插入值

linsert <key> before <value> <newvalue>		

在这里插入图片描述
8.在 value 的后面插入 newvalue 插入值

linsert <key> after <value> <newvalue>		

在这里插入图片描述
9.从左边删除n个value(从左到右)

lrem <key> <n> <value>			

在这里插入图片描述
10.将列表key下标为 index 的值替换成 value

lset <key> <index> <value>		

在这里插入图片描述

(三)、List的数据结构

List的数据结构为快速链表quickList
首先,当列表内的元素较少的情况下会使用一块连续的内存存储元素,这个结构叫ziplist,也就是压缩列表。
ziplist:将所有元素紧挨着一起存储,分配的是一块连续的内存
当数据量比较多的时候就会使用quicklist
quicklist:将多个ziplist通过链表组合起来,也就是把多个ziplist使用双向指针串起来使用,这样既满足了快速插入删除性能,又不会出现太大的空间冗余。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值