Redis五个基本数据类型详解
docker pull redis
docker run -p 6379:6379 --name redis -v {路径}/redis.conf:/etc/redis/redis.conf -v {路径}/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样?
set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!后面会讲具体怎么做。
下面是sds定义
而对于SDS,由于len属性和free属性的存在,对于修改字符串SDS实现了空间预分配和惰性空间释放两种策略:
1、空间预分配:对字符串进行空间扩展的时候,扩展的内存比实际需要的多,这样可以减少连续执行字符串增长操作所需的内存重分配次数。
2、惰性空间释放:对字符串进行缩短操作时,程序不立即使用内存重新分配来回收缩短后多余的字节,而是使用 free 属性将这些字节的数量记录下来,等待后续使用。(当然SDS也提供了相应的API,当我们有需要时,也可以手动释放这些未使用的空间。)
在原来的单链表基础上,我们查询数据需要从头遍历到尾,时间复杂度太高了。我们在思考提高查询效率时,在原有链表上添加索引,如果还是觉得查询太慢我们又在索引上再增加一级索引,以此类推。跳跃表的实质就是在单链表上一级一级地增加索引来达到加快查询的目的。
参考: https://zhuanlan.zhihu.com/p/161835019