文章目录
- (1)字符串型数据的常用操作:
- set <key> <value> :添加键值对
- get <key>:查询对应键值
- append <key><value>:将给定的<value> 追加到原值的末尾
- strlen <key>:获得值的长度
- setnx <key><value>:只有在 key 不存在时才设置 key 的值
- incr <key>:将 key 中储存的数字值增1 注意:只能对数字值操作,如果为空,新增值为1
- decr <key>:将 key 中储存的数字值减1。注意:只能对数字值操作,如果为空,新增值为-1
- incrby / decrby <key> <步长>:将 key 中储存的数字值增减。自定义步长。
- mset <key1> <value1> <key2> <value2> ..... :同时设置一个或多个 key-value对
- mget <key1> <key2> <key3> ..... :同时获取一个或多个 value
- msetnx <key1> <value1> <key2> <value2> ..... :当且仅当所有给定 key 都不存在时,同时设置一个或多个 key-value 对。(原子性,有其中一个失败则都失败)
- getrange <key> <起始位置> <结束位置>:获得key对应的[起始,结束]区间范围内的值(左闭右闭区间)
- setrange <key> <起始位置> <value> :用 <value>覆写<key>所储存的字符串值,从<起始位置>开始(索引从0开始)。
- setex <key> <过期时间> <value>:设置键值的同时,设置过期时间,单位秒。
- getset <key><value>:以新换旧,设置了新值同时获得旧值。
- (2)列表型数据的常用操作:
- lpush/rpush <key> <value1> <value2> <value3> .... :从左边/右边插入一个或多个值。
- lpop/rpop <key>:从左边/右边吐出一个值。值在键在,值光键亡。
- rpoplpush <key1> <key2>:从<key1>列表右边吐出一个值,插到<key2>列表左边。
- lrange <key> <start> <stop>: 按照索引下标获得元素(从左到右) (索引中0代表左边数第一个,-1代表右边数第一个)
- lrange <key> 0 -1 : 0左边第一个,-1右边第一个,(0 -1表示获取所有)
- lindex <key> <index>:按照索引下标获得元素(从左到右)
- llen <key>: 获得列表长度
- linsert <key> before/after <value> <newvalue>:在<value>的前面/后面插入<newvalue>插入值
- lrem <key> <n> <value>:从左边删除n个value(从左到右)
- lset <key> <index> <value>:将列表key下标为index的值替换成value
实验内容及要求:
自行设计字符型和列表型数据,并针对这些数据执行常用操作;
(1)字符串型数据的常用操作:
命令及操作结果截图:
set <key> <value> :添加键值对
设置键值对:k1:v1
set操作拓展:
当键值对存在时,对该键进行set操作会覆盖该键原先的值
关于set命令的一些可选参数:
*NX:当数据库中key不存在时,可以将key-value添加数据库
*XX:当数据库中key存在时,可以将key-value添加数据库,与NX参数互斥
*EX:key的超时秒数
*PX:key的超时毫秒数,与EX互斥
下面是对以上参数的相关实际操作:
补充:ttl <key> 命令用于查看还有多少秒过期,-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)
get <key>:查询对应键值
查询数据库中已有的键对应的值:
补充:keys *查看当前库所有key

append <key><value>:将给定的<value> 追加到原值的末尾
将给定的<value> 追加到原值的末尾:
strlen <key>:获得值的长度
查看当前数据库中所有键对应的值的长度:
setnx <key><value>:只有在 key 不存在时才设置 key 的值
添加键值对k4:v4
incr <key>:将 key 中储存的数字值增1 注意:只能对数字值操作,如果为空,新增值为1
添加键值对k5:500,并使其增1
不能对非数字值操作:
如果为空,新增值为1:
decr <key>:将 key 中储存的数字值减1。注意:只能对数字值操作,如果为空,新增值为-1
使k5减1:

不能对非数字值操作:
如果为空,新增值为-1
incrby / decrby <key> <步长>:将 key 中储存的数字值增减。自定义步长。
将k5键对应的值加10:
将k5键对应的值减10:
mset <key1> <value1> <key2> <value2> … :同时设置一个或多个 key-value对
设置多个键值对:k6:v6,k7:v7,k8:v8:
mget <key1> <key2> <key3> … :同时获取一个或多个 value
同时获取键k1,k2,k3,k4,k5的值:
msetnx <key1> <value1> <key2> <value2> … :当且仅当所有给定 key 都不存在时,同时设置一个或多个 key-value 对。(原子性,有其中一个失败则都失败)
设置键值对k9:v9,k10:v10:
当k10存在时,设置键值对k10:v10,k11,v11(k10已存在,因此设置k10:v10会失败,同时设置k11:v11也会失败(有其中一个失败则都失败))
getrange <key> <起始位置> <结束位置>:获得key对应的[起始,结束]区间范围内的值(左闭右闭区间)
设置键s1对应值“My homework”,并取区间范围[0,3],[5,6]的值:

setrange <key> <起始位置> <value> :用 <value>覆写<key>所储存的字符串值,从<起始位置>开始(索引从0开始)。
在s1对应的值的第五个字符(索引值为4)开始使用test覆写原来的值
setex <key> <过期时间> <value>:设置键值的同时,设置过期时间,单位秒。
设置键值对t1:v11且设置其过期时间为20秒:
getset <key><value>:以新换旧,设置了新值同时获得旧值。
获取s1的值同时将s1的值设置为”homework”:
为了更好操作,先清空一下当前库中的键值对
flushdb:清空当前库

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

创建一个键值为k2的列表,且从右边插入多个值:v11,v22,v33
在键值为k2的列表中,从右边插入多个值:v44,v55
lpop/rpop <key>:从左边/右边吐出一个值。值在键在,值光键亡。
在键值为k2的列表中,从左边吐出一个值:
在键值为k2的列表中,从右边吐出一个值:
rpoplpush <key1> <key2>:从<key1>列表右边吐出一个值,插到<key2>列表左边。
从k1列表右边吐出一个值,插到k2列表左边:
lrange <key> <start> <stop>: 按照索引下标获得元素(从左到右) (索引中0代表左边数第一个,-1代表右边数第一个)
获得列表k2中区间[0,2]和[-2,-1]间的元素:
lrange <key> 0 -1 : 0左边第一个,-1右边第一个,(0 -1表示获取所有)
获得列表k1中的所有元素:
lindex <key> <index>:按照索引下标获得元素(从左到右)
获得列表k2索引为2 的元素:
llen <key>: 获得列表长度
获得k1,k2列表的长度
linsert <key> before/after <value> <newvalue>:在<value>的前面/后面插入<newvalue>插入值
在k2列表中值v22,v33前面插入值hello:
在k2列表中值v22,v33后面插入值world
lrem <key> <n> <value>:从左边删除n个value(从左到右)
在列表k2中删除前两个hello(从左边开始数):
lset <key> <index> <value>:将列表key下标为index的值替换成value
将列表k2下标为2的值替换为hello:

