<b><font color="#c41230">可做简单的k-v缓存,实现计数器、分布式锁、session共享、分布式ID生成(自增)</font></b>
<b><font color="#c41230">redis底层是C,为什么<br>不用c字符串而用sds</font></b>
获取长度
C字符串并不记录自身长度,想获取长度只能遍历
sds直接获取len即可
内存分配
c字符串每次长度变化都会对数组进行内存重新分配,比较耗时
对sds内容进行修改或者需要扩展时,sds有空间预分配和惰性空间释放
缓冲区安全
C字符串不记录自身长度,不会自动进行边界检查,所以会增加溢出的风险
sds先检查空间是否满足修改所需的要求,如果不满足就先扩容再进行修改
二进制安全
C字符串是以空字符串(\0)结尾,所以字符串中不能包含空字符串,只能保存文本数据
既能保存文本数据,也能保存二进制数据(通过长度判断结束,不受影响)
<b><font color="#c41230">相关命令</font></b>
<b><font color="#c41230">set k v</font></b>
<b>存放一个k-v对</b>
<b><font color="#c41230">get k</font></b>
<b>获得k对应v</b>
<b><font color="#c41230">mset k1 v1 k2 v2 ...</font></b>
<b>存放多个k-v</b>
<b><font color="#c41230">mget k1 k2 k3 ...</font></b>
<b>获得多个v</b>
<b><u style=""><font color="#c41230" style="">setnx k v</font></u></b>
<b><font color="#c41230">当库中有该K时不存。当库中没有改K时存放<br>非常重要(做分布式锁)</font></b>
<b><font color="#c41230">getset k v</font></b>
<b><font color="#000000">获取值之后 修改该K的V</font></b>
<b><font color="#c41230">insc k1</font></b>
<b>该k1对应的v的值++(v必须是Integer类型)</b>
<b><font color="#c41230">desc k1</font></b>
<b><font color="#000000">该k1对应的v的值--(v必须是Integer类型)</font></b>
<b><font color="#c41230">inscby k1 步长</font></b>
<b>设置每次走的步长</b>
<b><font color="#c41230">descby k1 步长</font></b>
<b>设置每次走的步长</b>