redis学习-String类型的命令介绍以及特殊情况分析

目录

[1. set key value](#1. set key value)

[2. get key](#2. get key)

[3. append key string](#3. append key string)

[4. strlen key](#4. strlen key)

[5. incr key 和 decr key](#5. incr key 和 decr key)

[6. incrby key num 和 decrby key num](#6. incrby key num 和 decrby key num)

[7. getrange key start end](#7. getrange key start end)

[8. setrange key start string](#8. setrange key start string)

[9. setex key time value](#9. setex key time value)

[10. setnx key value](#10. setnx key value)

[11. mset key1 value1 key2 value2 ...](#11. mset key1 value1 key2 value2 ...)

[12. mget key1 key2 ...](#12. mget key1 key2 ...)

[13. msetnx key1 value1 key2 value2 ...](#13. msetnx key1 value1 key2 value2 ...)

[14. getset key value](#14. getset key value)


接下来的所有类型的操作中,-1都代表最后。

String类型适合存储字符串,用作计数器

1. set key value

创建键值对,当再次set已经存在的key时会覆盖掉之前的value;并且set可以将任意类型的数据转换成一个string类型的数据,比如对一个list类型的list1使用set list1 abc可以将list替换为string类型的abc。

2. get key

获取key对应的内容,仅对string类型的value使用。

3. append key string

对指定key的value后添加其他信息,即对value的内容进行字符拼接;添加后会返回value的长度;如果不存在指定的key,那么就会创建一个并将string赋给value,相当于set。

4. strlen key

查看指定key对应的value的长度。

5. incr key 和 decr key

让指定键值对的value自增1;相反,decr key则是让指定键值对的value自减1。

6. incrby key num 和 decrby key num

让指定键值对的value自增指定步长;相反,decrby key num则是让指定键值对的value自减指定步长。

以上两类操作value的值必须是数字。

7. getrange key start end

获取指定键值对的指定部分的信息,该范围是闭区间,start和end设置为0和-1代表获取整个value。要注意的是,在截取时由于要构成一个区间,区间要求前面的数不能大于后面的数,所以start不能大于end;还有就是如果出现负数,那么会将这个负数处理成"字符串长度+负数",所以-1代表末尾是因为字符串长度-1=最后一个字符的下标。

如果 start和end都大于最后一个字符的下标,那么就会截取到空串,因为只是end大于末尾下标时才会处理成末尾,start大于末尾下标时还是会按照真实位置计算。

8. setrange key start string

替换指定键值对的部分区间的信息,从指定位置start开始替换(start是下标,字符串是从0开始的),替换的长度和string的长度相同;当不存在该键值对时,它会创建一个键值对,并从start的位置开始将string赋值给value,然后前面的位置补上\x00。\x00中\是转义字符,也就是十六进制的0x00。返回的结果是执行完setrange操作后value的长度。

9. setex key time value

setex为set+expire,当不存在指定key时会创建并赋值,当存在指定键值对时则会覆盖原来的value,set操作结束后设置过期时间;当对同一键值对执行多次setex操作时,后面的setex操作不仅会覆盖该键值对的value值,而且会重新设定过期时间。

10. setnx key value

setnx为set+notexists,仅当不存在key时才创建键值对,避免覆盖原有的键值对,在分布式锁中会经常用到。

11. mset key1 value1 key2 value2 ...

同时执行多个set操作。

12. mget key1 key2 ...

同时执行多个get操作。

13. msetnx key1 value1 key2 value2 ...

同时执行多个setnx操作,但msetnx是一个原子性操作,要么一起成功,要么一起失败,所以如果有一个key已经存在,那么这个key对应的setnx操作不会执行,就会导致所有setnx操作不会执行,即如果有一个key已经存在那么msetnx操作无效;区别于mget,当key不存在时get会返回nil而不是不执行,所以是成功执行get操作。

14. getset key value

先get后set,当key不存在时返回nil,并创建键值对;当key存在时则先返回原来的值,再用新值覆盖掉旧值。

相关推荐
扶尔魔ocy10 分钟前
【Linux C/C++开发】轻量级关系型数据库SQLite开发(包含性能测试代码)
linux·数据库·c++·sqlite
旋风菠萝25 分钟前
项目复习(1)
java·数据库·八股·八股文·复习·项目、
w236173460128 分钟前
Django框架漏洞深度剖析:从漏洞原理到企业级防御实战指南——为什么你的Django项目总被黑客盯上?
数据库·django·sqlite
2302_809798321 小时前
【JavaWeb】MySQL
数据库·mysql
drowingcoder1 小时前
MySQL相关
数据库
Musennn2 小时前
MySQL刷题相关简单语法集合
数据库·mysql
Think Spatial 空间思维3 小时前
【HTTPS基础概念与原理】TLS握手过程详解
数据库·网络协议·https
laowangpython3 小时前
MySQL基础面试通关秘籍(附高频考点解析)
数据库·mysql·其他·面试
mooyuan天天3 小时前
SQL注入报错“Illegal mix of collations for operation ‘UNION‘”解决办法
数据库·web安全·sql注入·dvwa靶场·sql报错
运维-大白同学4 小时前
go-数据库基本操作
开发语言·数据库·golang