设置key对应的value值:
127.0.0.1:6379> set k1 foobar
OK
127.0.0.1:6379> get k1
"foobar"
对同一个key重复set value会覆盖原来的值:
127.0.0.1:6379> set k1 foobar
OK
127.0.0.1:6379> get k1
"foobar"
127.0.0.1:6379> set k1 barbar
OK
#get后可以看到数据被覆盖
127.0.0.1:6379> get k1
"barbar"
可选参数:
EX ${time}:value过期时间(s),可使用ttl
查看过期剩余时间,-1表示永不过期,-2表示已过期;
PX ${time}: value过期时间(ms),与EX互斥;
NX:当数据库key不存在时添加数据
XX:当数据库存在key时添加数据
127.0.0.1:6379> set k2 555 xx
(nil)
127.0.0.1:6379> set k2 555 nx
OK
获取key对应的value
127.0.0.1:6379> get k2
"555"
#不存在时返回null
127.0.0.1:6379> get k3
(nil)
在key对应的value尾部贫瘠字符串
127.0.0.1:6379> get k2
"555"
127.0.0.1:6379> append k2 666
#返回拼接后新的字符串长度
(integer) 6
127.0.0.1:6379> get k2
"555666"
当key不存在时插入数据,功能与set \
一致
127.0.0.1:6379> get k1
"aaa"
127.0.0.1:6379> setnx k1 bbb
(integer) 0
127.0.0.1:6379> get k1
"aaa"
127.0.0.1:6379> setnx k2 111
(integer) 1
获取key对于的value的字符串长度
127.0.0.1:6379> get k2
"555666"
127.0.0.1:6379> strlen k2
(integer) 6
key对应的值加一
key对应的值减一
127.0.0.1:6379> get k3
"500"
127.0.0.1:6379> incr k3
(integer) 501
127.0.0.1:6379> decr k3
(integer) 500
key对应的值加step
key对应的值减step
127.0.0.1:6379> get k3
"500"
127.0.0.1:6379> incrby k3 100
(integer) 600
127.0.0.1:6379> decrby k3 100
(integer) 500
ps: 由于Redis是单线程的,这些自增减操作都是原子操作。
设置多个键值对
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
获取多个键值对的值
127.0.0.1:6379> mget k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) (nil)
设置多个键值对,若其中一个key在redis中已经存在则会导致全部插入失败
127.0.0.1:6379> msetnx kkk1 vvv1 kkk2 vvv2
(integer) 1
#key kk1已存在,全部插入失败
127.0.0.1:6379> msetnx aa1 a1 aa2 a2 kk1 aa3
(integer) 0
127.0.0.1:6379> keys *
1) "kkk2"
2) "k2"
3) "k3"
4) "kkk1"
5) "k1"
6) "kk1"
7) "kk2"
获取key对应的value字符串的字串,类似于Java的subString,但它会取到右边界。
127.0.0.1:6379> get key
"abcdefg"
127.0.0.1:6379> getrange key 0 3
"abcd"
127.0.0.1:6379> GETRANGE key 0 1000
"abcdefg"
在value的第i个位置插入值
127.0.0.1:6379> get key
"abcdefg"
127.0.0.1:6379> setrange key 2 555
(integer) 7
127.0.0.1:6379> get key
"ab555fg"
设置带有过期时间的键值对
127.0.0.1:6379> setex key 20 123456
OK
127.0.0.1:6379> ttl key
(integer) 16
设置新值并取得旧值:
127.0.0.1:6379> getset key lucy
"jack"
String的底层数据结构为简单动态字符串(Simple Dynamic String,简写为SDS ),是一种可以修改的字符串。内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。
扩容机制: 在底层数据结构中字符数组的容量(capacity)总是要大于实际长度(len),当实际长度等于字符数组容量时,触发扩容,在当前容量小于1M时则扩容为原来两倍,超过1M时则每次扩容只增加1M。需要注意的是,字符串的最大长度为512M。