【Redis总结】5-Redis数据类型之字符串(String)
一、String 数据类型 介绍
Redis中最基本的数据类型,它是二进制安全的,可以包含任意数据类型,如图片等。Redis中String类型的数据上限的512M。下面是常用的String操作命令:
String(字符串)数据类型常用命令说明
命令 | 说明 |
set |
设置字符串的值 SET key value :设置指定 key 的值为 value |
get | GET key:获取字符串的值,如果 key 不存在时,返回 nil |
del | 删除指定键 |
append | 取出对应键的值进行追加,如果键不存在,则会新建一个并且值追加进去 |
strlen | 返回键对应的值的长度 |
incr | 每次递增1 |
decr | 每次递减1 |
incrby | 每次递增n |
decrby | 每次递减n |
incrbyfloat | 每次递增浮点数大小 |
getrange | 获取执行下标范围的字符串,类似strstring()截取字符串 |
setrange | 设置指定下标的字符串进行替换 |
setex(set with expire)键秒值 | 设置值同时设置过期时间 |
setnx(set if not exist) | 只有键不存在的时候才设置值,否则设值失败 |
mset |
批量设置值 MSET key value [key value ...] :同时设置一个或多个 key-value 对 |
mget | 批量获取值 |
msetnx | 批量判断键是否存在并且设置值,如果其中有一个键已存在,所有操作都将失败 |
getset | 获取设置key的值并返回原来的旧值 |
下面我们通过一些示例详细说明上面命令的使用方法。
二、命令详解
1、set、get、del、append、strlen
- set:设置字符串的值;
- get:获取字符串的值,如果 key 不存在时,返回 nil;
- del:删除指定key的键值对,删除成功返回1,删除失败返回0,如果key不存在说明删除失败,返回0;
- append:取出对应键的值进行追加,如果键不存在,则会新建一个并且值追加进去;
- strlen:返回键对应的值的长度;
127.0.0.1:6379> set k1 value1 # 设置 k1 键值对 OK 127.0.0.1:6379> get k1 # 获取 k1 键值对 "value1" 127.0.0.1:6379> get k2 (nil) 127.0.0.1:6379> del k1 # 删除 k1 键值对 (integer) 1 127.0.0.1:6379> get k1 (nil)
127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> get k1 "v1" 127.0.0.1:6379> append k1 v2v3 # append 命令追加内容 (integer) 6 127.0.0.1:6379> get k1 "v1v2v3" 127.0.0.1:6379> strlen k1 # strlen 命令用于查看 key 值的长度 (integer) 6 127.0.0.1:6379> EXISTS k2 # EXISTS 查看 key 是否存在,不存在返回 0;存在,返回1 (integer) 0 127.0.0.1:6379> append k2 m1 # 如果 key 不存在,使用 append 命令则新建该 key,并将值赋予该 key (integer) 2 127.0.0.1:6379> get k2 "m1" 127.0.0.1:6379> append a1 aa (integer) 2 127.0.0.1:6379> get a1 "aa"
2、incr、decr、incrby、decrby、incrbyfloat
注意:这组命令只对数字类型的值有效,如果值么包含错误的类型,或字符串类型的值不能表示为数字,那么将会报错,因为字符串等不能进行递增递减操作
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incr 操作
一定要是数字才能进行加减
- incr:每次递增1;
- decr:每次递减1;
- incrby:每次递增n;
- decrby:每次递减n;
- incrbyfloat:每次递增n浮点数大小
127.0.0.1:6379> set k3 value3 OK 127.0.0.1:6379> get k3 "value3" 127.0.0.1:6379> INCR k3 (error) ERR value is not an integer or out of range 127.0.0.1:6379> set k4 444 OK 127.0.0.1:6379> INCR k4 (integer) 445 127.0.0.1:6379> INCR k4 (integer) 446 127.0.0.1:6379> INCR k5 # key 不存在时,初始化为 0,再自增 (integer) 1 127.0.0.1:6379> get k5 "1"
127.0.0.1:6379> set k4 446 OK 127.0.0.1:6379> get k4 "446" 127.0.0.1:6379> decr k4 (integer) 445 127.0.0.1:6379> decr k4 (integer) 444 127.0.0.1:6379> get k4 "444" 127.0.0.1:6379> decr k6 # key 不存在时,初始化为0,再减 1 (integer) -1 127.0.0.1:6379> decr k6 (integer) -2 127.0.0.1:6379> get k6 "-2"
127.0.0.1:6379> set k7 1 OK 127.0.0.1:6379> incrby k7 2 (integer) 3 127.0.0.1:6379> incrby k7 2 (integer) 5 127.0.0.1:6379> incrby k7 4 (integer) 9 127.0.0.1:6379> decrby k7 8 (integer) 1 127.0.0.1:6379> decrby k7 3 (integer) -2
127.0.0.1:6379> set k8 10 OK 127.0.0.1:6379> get k8 "10" 127.0.0.1:6379> INCRBYFLOAT k8 0.3 # 每次递增 0.3 "10.3" 127.0.0.1:6379> INCRBYFLOAT k8 0.3 "10.6" 127.0.0.1:6379> INCRBYFLOAT k8 0.3 "10.9" 127.0.0.1:6379> INCRBYFLOAT k8 0.3 "11.2"
3、getrange、setrange
- getrange:获取执行下标范围的字符串,类似strstring()截取字符串,下标从0开始,-1表示最后一个;
- setrange:设置指定下标的字符串进行替换;
127.0.0.1:6379> set s1 helloworld OK 127.0.0.1:6379> GETRANGE s1 0 -1 "helloworld" 127.0.0.1:6379> GETRANGE s1 0 4 "hello" 127.0.0.1:6379> SETRANGE s1 5 Redis (integer) 10 127.0.0.1:6379> get s1 "helloRedis"
4、setex、setnx
- setex(set with expire)键秒值:设置值同时设置过期时间
- setnx(set if not exist):只有键不存在的到时候才设置值,否则设置失败
127.0.0.1:6379> SETEX s2 20 helloRedis OK 127.0.0.1:6379> ttl s2 (integer) 11 127.0.0.1:6379> ttl s2 (integer) 7 127.0.0.1:6379> get s2 "helloRedis" 127.0.0.1:6379> ttl s2 (integer) 0 127.0.0.1:6379> ttl s2 (integer) -2 127.0.0.1:6379> get s2 # 20s后,s2键值对过期了,则会被直接删除 (nil) 127.0.0.1:6379> set s3 HelloChina OK 127.0.0.1:6379> SETNX s3 HelloWorld # s3 键值对存在时,setnx 命令设置失败 (integer) 0 127.0.0.1:6379> get s3 "HelloChina" 127.0.0.1:6379> EXISTS s4 (integer) 0 127.0.0.1:6379> get s4 (nil) 127.0.0.1:6379> SETNX s4 HelloWorld # s4 键值对不存在时,setnx 命令设置成功 (integer) 1 127.0.0.1:6379> get s4 "HelloWorld"
5、mset、mget、msetnx
- mset:批量设置值;
- mget:批量获取值;
- msetnx:批量判断键是否存在并且设置值,如果其中有一个键已存在,所有操作都将失败;
127.0.0.1:6379> MSET k1 value1 k2 value2 k3 value3 OK 127.0.0.1:6379> MGET k1 k2 k3 1) "value1" 2) "value2" 3) "value3" 127.0.0.1:6379> MGET k1 k2 k3 k4 1) "value1" 2) "value2" 3) "value3" 4) (nil) 127.0.0.1:6379> MGET k1 k2 k3 value2 1) "value1" 2) "value2" 3) "value3" 4) (nil) 127.0.0.1:6379> MSETNX k4 v44 k5 v55 # k4、k5 不存在,使用 MSETNX 设置成功 (integer) 1 127.0.0.1:6379> MGET k4 k5 1) "v44" 2) "v55" 127.0.0.1:6379> MSETNX k5 v5 k6 v66 # 只要有一个key已存在,所有操作都set不成功 (integer) 0 127.0.0.1:6379> MGET k4 k5 k6 1) "v44" 2) "v55" 3) (nil)
6、getset
- getset:获取设置 key 的值并返回原来的旧值
127.0.0.1:6379> set k1 value01 OK 127.0.0.1:6379> get k1 "value01" 127.0.0.1:6379> GETSET k1 vv "value01" 127.0.0.1:6379> get k1 "vv"
三、总结
更多命令学习可以参考Redis中文官网 http://www.redis.cn/commands.html 进行学习。