2、string(字符串)相关介绍
2.1 string(字符串)的内部结构
string(字符串)是Redis最简单也是使用最广泛的数据结构,它的内部是一个字符数组。如图所示:
Redis中string(字符串)是动态字符串,允许修改;它在结构上的实现类似于Java中的ArrayList(默认构造一个大小为10的初始数组),这是冗余分配内存的思想,也称为预分配;这种思想可以减少扩容带来的性能消耗。
2.2 string(字符串)的扩容
当string(字符串)的大小达到扩容阈值时,将会对string(字符串)进行扩容,string(字符串)的扩容主要有以下几个点:
-
长度小于1MB,扩容后为原先的两倍; length = length * 2
-
长度大于1MB,扩容后增加1MB; length = length + 1MB
-
字符串的长度最大值为 512MB
3、string(字符串)的指令
3.1 单个键值对增删改查操作
set -> key 不存在则新增,存在则修改
set key value
get -> 查询,返回对应key的value,不存在返回(nil)
get key
del -> 删除指定的key(key可以是多个)
del key [key …]
示例:
127.0.0.1:6379> set name liziba
OK
127.0.0.1:6379> get name
“liziba”
127.0.0.1:6379> set name liziba001
OK
127.0.0.1:6379> get name
“liziba001”
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
3.2 批量键值对
批量键值读取和写入最大的优势在于节省网络传输开销
mset -> 批量插入
mset key value [key value …]
mget -> 批量获取
mget key [key …]
示例:
127.0.0.1:6379> mset name1 liziba1 name2 liziba2 name3 liziba3
OK
127.0.0.1:6379> mget name1 name2 name3
-
“liziba1”
-
“liziba2”
-
“liziba3”
3.3 过期set命令
过期set是通过设置一个缓存key的过期时间,使得缓存到期后自动删除从而失效的机制。
方式一:
expire key seconds
示例:
127.0.0.1:6379> set name liziba
OK
127.0.0.1:6379> get name
“liziba”
127.0.0.1:6379> expire name 10 # 10s 后get name 返回 nil
(integer) 1
127.0.0.1:6379> get name
(nil)
方式二:
setex key seconds value
示例:
127.0.0.1:6379> setex name 10 liziba # 10s 后get name 返回 nil
OK
127.0.0.1:6379> get name
(nil)
3.4 不存在创建存在不更新
上面的set操作不存在创建,存在则更新;此时如果需要存在不更新的场景,那么可以使用如下这个指令
setnx -> 不存在创建存在不更新
setnx key value
示例:
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> setnx name liziba
(integer) 1
127.0.0.1:6379> get name
“liziba”
127.0.0.1:6379> setnx name liziba_98 # 已经存在再次设值,失败
(integer) 0
127.0.0.1:6379> get name
“liziba”
总结
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的Android开发中高级必知必会核心笔记,共计2968页PDF、58w字,囊括Android开发648个知识点,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。
虽然面试失败了,但我也不会放弃入职字节跳动的决心的!建议大家面试之前都要有充分的准备,顺顺利利的拿到自己心仪的offer。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。
虽然面试失败了,但我也不会放弃入职字节跳动的决心的!建议大家面试之前都要有充分的准备,顺顺利利的拿到自己心仪的offer。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!