实验内容及要求:
自行设计字符型和列表型数据,并针对这些数据执行常用操作;
命令及操作结果截图:
设置键值对:k1:v1

set操作拓展:
当键值对存在时,对该键进行set操作会覆盖该键原先的值

关于set命令的一些可选参数:

*NX:当数据库中key不存在时,可以将key-value添加数据库
*XX:当数据库中key存在时,可以将key-value添加数据库,与NX参数互斥
*EX:key的超时秒数
*PX:key的超时毫秒数,与EX互斥
下面是对以上参数的相关实际操作:
补充:ttl
命令用于查看还有多少秒过期,-1表示永不过期,-2表示已过期
设置键值对k2:v2且设置其超时时间为15秒:
使用“EX”设置其超时时间为15秒

使用“PX”设置其超时时间为15秒

当数据库中k3不存在时,将键值对k3:v3添加数据库:

解释:第二次使用set k3 v3 NX命令时,数据库中已有k3,而NX是当数据库中key不存在时才能将其添加进数据库,所以不能成功set。
当数据库中k3存在时,将键值对k3:v33添加数据库:

解释:将键值对k3:v33添加数据库可以直接使用“set k3
v33”命令,数据库中如果有k3键,则将其覆盖,若无k3键,则往数据库中新增键值对k3:v33;而使用“ set k3 v33
XX”命令的话,当数据库有k3键时,会执行覆盖操作,而当数据库中无k3键时,该操作不成功,返回(nil)
查询数据库中已有的键对应的值:
补充:keys *查看当前库所有key

将给定的

查看当前数据库中所有键对应的值的长度:

添加键值对k4:v4

添加键值对k5:500,并使其增1

不能对非数字值操作:

如果为空,新增值为1:

使k5减1:

不能对非数字值操作:

如果为空,新增值为-1

将k5键对应的值加10:

将k5键对应的值减10:

设置多个键值对:k6:v6,k7:v7,k8:v8:

同时获取键k1,k2,k3,k4,k5的值:

设置键值对k9:v9,k10:v10:

当k10存在时,设置键值对k10:v10,k11,v11(k10已存在,因此设置k10:v10会失败,同时设置k11:v11也会失败(有其中一个失败则都失败))

设置键s1对应值“My homework”,并取区间范围[0,3],[5,6]的值:

在s1对应的值的第五个字符(索引值为4)开始使用test覆写原来的值

设置键值对t1:v11且设置其过期时间为20秒:

获取s1的值同时将s1的值设置为”homework”:

为了更好操作,先清空一下当前库中的键值对
flushdb:清空当前库

补充:
String的数据结构为简单动态字符串(Simple Dynamic
String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配.
如图中所示,内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。
关于列表(单键多值):
要注意插入的顺序!
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
命令及操作结果截图
创建一个键值为k1的列表,且从左边插入多个值:v1,v2,v3

创建一个键值为k2的列表,且从右边插入多个值:v11,v22,v33

在键值为k2的列表中,从右边插入多个值:v44,v55

在键值为k2的列表中,从左边吐出一个值:

在键值为k2的列表中,从右边吐出一个值:

从k1列表右边吐出一个值,插到k2列表左边:

获得列表k2中区间[0,2]和[-2,-1]间的元素:

获得列表k1中的所有元素:

获得列表k2索引为2 的元素:

获得k1,k2列表的长度

在k2列表中值v22,v33前面插入值hello:

在k2列表中值v22,v33后面插入值world

在列表k2中删除前两个hello(从左边开始数):

将列表k2下标为2的值替换为hello:
