赞
踩
字符串String是Redis最简单最常用的数据结构,它的内部表示就是一个字符数组,如图所示。Redis所有的数据结构都是以唯一的key字符串作为名称,然后通过这个唯一key值来获取相应的value数据。不同类型的数据结构的差异就在于value的结构不一样。
一、存储
Redis的字符串是动态字符串,是可以修改的字符串,内部结构的实现类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配,如图2所示,内部为当前字符串分配的实际空间capacity一般要高于实际字符串长度len。当字符串长度小于1MB时,扩容都是加倍现有的空间。如果字符串长度超过1MB,扩容时一次只会多扩1MB的空间。字符串最大长度为512MB。
二、Redis命令
1.键值对
相当于字典的key和value,支持简单的增删改查操作。下面代码中的“name”就是字典的key,而value就是字符串"zhangsan"。
- > set name zhangsan
- OK
- > get name
- "zhangsan"
- > exists name
- (integer) 1
- > del name
- (integer) 1
- > get name
- (nil)
2.批量键值对
可以对多个字符串进行批量读写,节省网络耗时开销
- > mset name1 zhangsan name2 lisi name3 wanger
- OK
-
- > mget name1 name2 name3 # 返回的是一个列表
- 1) "zhangsan"
- 2) "lisi"
- 3) "wanger"
-
- > mget name1 name2 name3 name4
- 1) "zhangsan"
- 2) "lisi"
- 3) "wanger"
- 4) (nil)
3.过期和set命令拓展
可以对key设置过期时间,到时间会被自动删除,这个功能常用来设置缓存的失效时间。
- > set name zhangsan
- OK
- > get name
- "zhangsan"
-
- > expire name 5 # 5s 后过期
- (integer) 1
-
- ... # 等5s
- > get name
- (nil)
-
- > setex name 5 zhangsan # 5s后过期,等价于set+expire
- OK
-
- > get name
- "zhangsan"
-
- ... # 等5s
- > get name
- (nil)
-
-
- > setnx name zhangsan # 如果name不存在就执行set创建
- (integer) 1
-
- > setnx name lisi
- (integer) 0 # name已经存在,不会set成功
-
- > get name
- "zhangsan" # 没有改变
4.计数
如果value值是一个整数,可以对它进行自增操作。自增是有范围的,它的范围在signed long的最大值和最小值之间,超出这个范围Redis会报错。
- > set age 18
- OK
- > incr age
- (integer) 19
- > incrby age 10
- (integer) 29
- > incrby age -5 #相当于减5
- (integer) 24
三、使用场景
字符串结构使用非常广泛,一个常见的用途就是缓存用户信息。我们可以将用户信息结构序列化为JSON字符串,然后将字符串放到Redis来缓存,同样取用户信息时经过一次反序列化的过程
END
如有收获,请帮忙转发,您的鼓励是作者最大的动力,谢谢!
一大波微服务、分布式、高并发、高可用的原创系列文章正在路上,欢迎扫描下方二维码,持续关注:
文玥公子
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。