Redis--String篇

Redis–String篇

一、常用命令

1.set [EX seconds] [PX milliseconds] [NX|XX]

设置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

2.get

获取key对应的value

127.0.0.1:6379> get k2
"555"
#不存在时返回null
127.0.0.1:6379> get k3
(nil)

3.append

在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"

4.setnx

当key不存在时插入数据,功能与set \ \ nx一致

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

5.strlen

获取key对于的value的字符串长度

127.0.0.1:6379> get k2
"555666"
127.0.0.1:6379> strlen k2
(integer) 6

6.incr

key对应的值加一

7.decr

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

8.incrby

key对应的值加step

9.decrby

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是单线程的,这些自增减操作都是原子操作。

10.mset

设置多个键值对

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK

11.mget

获取多个键值对的值

127.0.0.1:6379> mget k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) (nil)

13.msetnx

设置多个键值对,若其中一个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"

14.getrange

获取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"

15.setrange

在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"

16.setex

设置带有过期时间的键值对

127.0.0.1:6379> setex key 20 123456
OK
127.0.0.1:6379> ttl key
(integer) 16

17.getset

设置新值并取得旧值:

127.0.0.1:6379> getset key lucy
"jack"

二、Redis中string的底层数据结构:

String的底层数据结构为简单动态字符串(Simple Dynamic String,简写为SDS ),是一种可以修改的字符串。内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。
扩容机制: 在底层数据结构中字符数组的容量(capacity)总是要大于实际长度(len),当实际长度等于字符数组容量时,触发扩容,在当前容量小于1M时则扩容为原来两倍,超过1M时则每次扩容只增加1M。需要注意的是,字符串的最大长度为512M。

你可能感兴趣的:(redis,redis,缓存,数据库)