String是Redis最基本的类型,一个key对应一个value。String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M。
- 设置key-value
set key value
- 获取指定key的value
get key
- 将给定的value追加到原值的末尾
append key value
- 获得值的长度
strlen key
- 只有在 key不存在时,设置 key 的值
setnx key value
- 将 key 中储存的数字值增1,只能对数字值操作,如果为空,新增值为1,具有原子性
incr key
- 将 key 中储存的数字值减1,只能对数字值操作,如果为空,新增值为-1,具有原子性
decr key
- 将 key 中储存的数字值增减。自定义步长。
incrby/decrby key 步长
- 同时设置一个或多个 key-value对
mset key1 value1 key2 value2......
- 同时获取一个或多个 value
mget key1 key2......
- 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
msetnx key1 value1 key2 value2.....
- 获得值的范围,类似java中的substring,前包,后包(索引从0开始)
getrange key <起始位置> <结束位置>
- 用value覆写key所储存的字符串值,从起始位置开始(索引从0开始)。
setrange key <起始位置> value
- 设置键值的同时,设置过期时间,单位秒。
setex key 过期时间 value
- 以新换旧,设置了新值同时获得旧值。
getset key newValue演示
127.0.0.1:6379> set key 1 OK 127.0.0.1:6379> get key "1" #在key的值后追加2 127.0.0.1:6379> append key 2 #返回追加后value的长度 (integer) 2 127.0.0.1:6379> keys * 1) "key" #给不存在的k2追加,会创建k1 127.0.0.1:6379> append k2 1 (integer) 1 127.0.0.1:6379> keys * 1) "key" 2) "k2" 127.0.0.1:6379> del k2 (integer) 1 127.0.0.1:6379> get key "12" #获取key的值的长度 127.0.0.1:6379> strlen key (integer) 2 127.0.0.1:6379> append key 3 (integer) 3 127.0.0.1:6379> strlen key (integer) 3 127.0.0.1:6379> get key "123" #如果key不存在就设置 127.0.0.1:6379> setnx key 1 #返回0表示设置失败,key已存在 (integer) 0 127.0.0.1:6379> setnx key2 1 3key不存在,设置成功,返回1 (integer) 1 # 给key自增1 127.0.0.1:6379> incr key #自增成功返回自增后的值 (integer) 124 127.0.0.1:6379> incr key (integer) 125 #给key自减1 127.0.0.1:6379> decr key #自减成功返回自减后的值 (integer) 124 127.0.0.1:6379> decr key (integer) 123 127.0.0.1:6379> set key2 a OK #给值不是数值型的k2自增 127.0.0.1:6379> incr key2 (error) ERR value is not an integer or out of range #给值不是数值型的k2自减 127.0.0.1:6379> decr key2 (error) ERR value is not an integer or out of range 127.0.0.1:6379> get key "123" #自定义步长自增 127.0.0.1:6379> incrby key 10 (integer) 133 127.0.0.1:6379> get key "133" 127.0.0.1:6379> decrby key 33 (integer) 100 127.0.0.1:6379> get key "100" 127.0.0.1:6379> flushdb OK 127.0.0.1:6379> keys * (empty array) #设置多个值 127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 OK 127.0.0.1:6379> keys * 1) "k1" 2) "k2" 3) "k3" #获取多个值 127.0.0.1:6379> mget k1 k2 k3 1) "v1" 2) "v2" 3) "v3" 127.0.0.1:6379> flushdb OK 127.0.0.1:6379> set k2 v2 OK #当所有键不存在就设置 127.0.0.1:6379> msetnx k1 v1 k2 v2 k3 v3 #返回0设置失败,因为k2已存在 (integer) 0 127.0.0.1:6379> keys * 1) "k2" 127.0.0.1:6379> flushdb OK 127.0.0.1:6379> msetnx k1 v1 k2 v2 k3 v3 #清空库后设置成功,返回1 (integer) 1 127.0.0.1:6379> keys * 1) "k1" 2) "k2" 3) "k3" 127.0.0.1:6379> flushdb OK 127.0.0.1:6379> set key 123456 OK #获取key【1-3】的值 127.0.0.1:6379> getrange key 1 3 "234" #起始索引小于0返回空串 127.0.0.1:6379> getrange key -1 3 "" #结束索引大于值的最大索引视为最大索引 127.0.0.1:6379> getrange key 0 100 "123456" 127.0.0.1:6379> get key "123456" #从索引为1处覆写key的值 127.0.0.1:6379> setrange key 1 abc #返回覆写后值的长度 (integer) 6 127.0.0.1:6379> get key "1abc56" 127.0.0.1:6379> setrange key 1 abcdef (integer) 7 127.0.0.1:6379> get key "1abcdef" 127.0.0.1:6379> setrange key 0 "" (integer) 7 127.0.0.1:6379> get key "1abcdef" 127.0.0.1:6379> setrange key 0 '' (integer) 7 127.0.0.1:6379> get key "1abcdef" 127.0.0.1:6379> setrange key 1 23456789 (integer) 9 127.0.0.1:6379> get key "123456789" 127.0.0.1:6379> keys * 1) "key" #设置值的同时设置过期时间为60秒 127.0.0.1:6379> setex k2 60 v2 OK #查看还有多久过期 127.0.0.1:6379> ttl k2 (integer) 57 #移除key的过期时间 127.0.0.1:6379> persist k2 (integer) 1 127.0.0.1:6379> ttl k2 #返回-1表示永不过期 (integer) -1 #设置新值同时返回旧值 127.0.0.1:6379> getset k2 newV2 "v2" 127.0.0.1:6379> get k2 "newV2"String的数据结构
String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配.当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。
redis数据类型之list详解


