linux 和 mac
1 | echo "export GOPROXY=https://goproxy.cn" >> ~/.profile && source ~/.profile |
linux 和 mac
1 | echo "export GOPROXY=https://goproxy.cn" >> ~/.profile && source ~/.profile |
写了一个小工具,主要是爬取西瓜视频的教程,方便下载下载学习,语言使用 goLang
. 软件是编译成 exe 文件,想要源码直接联系我。
Redis 中的每个数据库,都由一个 redis.h/redisDb 结构表示:
1 | typedef struct redisDb { |
事务的命令包括 MULTI 、 DISCARD 、 EXEC 和 WATCH
1 | MULTI |
由于 redis 需要对每一个 key 产生不同的操作,所以Redis 必须让每个键都带有类型信息,使得程序可以检查键的类型,并为它选择合适的处理方式
为了解决以上问题, Redis 构建了自己的类型系统,这个系统的主要功能包括:
整数集合(intset)用于有序、无重复地保存多个整数值,它会根据元素的值,自动选择该用什
么长度的整数类型来保存元素
举个例子,如果在一个 intset 里面,最长的元素可以用 int16_t 类型来保存,那么这个 intset
的所有元素都以 int16_t 类型来保存。
另一方面,如果有一个新元素要加入到这个 intset ,并且这个元素不能用 int16_t 类型来保存
——比如说,新元素的长度为 int32_t ,那么这个 intset 就会自动进行“升级” :先将集合中现有的所有元素从 int16_t 类型转换为 int32_t 类型,接着再将新元素加入到集合中。
在 C 语言中,字符串可以用一个 \0 结尾的 char 数组来表示。 比如说,hello world 在 C 语言中就可以表示为 “hello world\0” 。
这种简单的字符串表示在大多数情况下都能满足要求,但是,它并不能高效地支持长度计算和 追加(append)这两种操作:
每次计算字符串长度(strlen(s))的复杂度为 θ(N) 。
对字符串进行 N 次追加,必定需要对字符串进行 N 次内存重分配(realloc)。
在 Redis 的使用场景中,基本的架构图如下:
如果在缓存中查询不到数据,会直接到 DB 中查询,查询的数据再插入到缓存中。例如我们根据 orderId 查询对应的订单,具体伪代码如下:
1 | OrderEntity getOrder(String orderId){ |
Update your browser to view this website correctly.&npsb;Update my browser now