对码当歌,猿生几何?
#最热 #最新

Redis主要底层数据结构扩容

简单动态字符串如果SDS修后的长度小于1MB,则将SDS扩容为修改后的字符串长度的2倍(未使用的空间设为修改后的字符串长度)如果SDS修后的长度大于等于1MB,则将SDS扩容1MB的空间(未使用的空间设为1MB)如果字符串缩短,SDS选择惰性释放,将释放的空间使用free记录下来,以便下次使用hash触发条件扩容未执行BGSAVE,负载因子大于等于1时执行BGSAVE快照时,负载因子大于等于5时,以尽量避开服务器快照期间扩容缩容负载因子小于0.1时渐进式rehash扩缩容大小扩容,首次大于 字典里元素数量*2*2^n 缩容,   首次大于 字典里元素数量*2^n  查看全文

Redis主要数据类型的编码

简单动态字符串底层编码整数字符串对象embstr编码的字符串对象简单动态字符串转换long int使用int编码float使用 简单动态字符串编码当使用embstr编码的字符串长度大于39时,转换为简单动态字符串编码列表底层数据结构压缩列表双端链表转换列表元素长度大于64个字节或者列表元素数量大于512压缩列表编码则转换为双端链表Hash底层数据结构压缩列表字典转换列表元素长度大于64个字节或者列表元素数量大于512压缩列表编码则转换为字典集合底层数据结构整数集合,int16 int32 int64字典。存储时字典的key存储集合元素,value存储null转换整数集合转换为字典,存储的整数数量超过512则使用字段有序集合底层数据结构压缩列表跳跃表转换压缩列表编码要求集合元素数量小于128,元素大小小于64字节。不满足这两个条件则转换为跳跃表。 查看全文

Redis保存多大的Key-Value合适

1. 避免大key首先,需要明确的是,Redis官方并不推荐存储过大的key或value。大key不仅占用大量内存,而且在处理时(如读取、写入、删除)可能会导致Redis性能下降,甚至阻塞整个Redis服务。因此,在设计Redis数据结构时,应尽量避免创建大key。2. 合理的key大小关于key的大小,一般建议key的长度不要超过1024字节,这是为了确保key的存储效率和可读性。虽然Redis本身可以支持更长的key,但过长的key会增加内存的消耗,并且降低查询效率。3. 评估value的大小对于value的大小,虽然没有固定的限制(最大为512MB),但应根据实际需求进行合理评估。如果某个key的value非常大,应考虑将其拆分成多个小key来存储。这样做不仅可以提高Redis的存储效率,还可以避免在删除或修改大value时导致的性能问题。 查看全文

GO-GMP线程模型

介绍G用户态线程M系统线程P处理器,作为M和G的桥梁,负责G的调度和执行.调度器启动时就会创建GOMAXPROCS个处理器。每个处理器都有一个本地空闲队列和运行队列,全局环境各维护着一个空闲队列和运行队列。调度流程获取可用的G首先从P的本地空闲队列获取可用的G 如果没有则从全局空闲队列获取,从全局队列获取时,则会最多同步32个free的G到P的本地free队列.如果没有则创建一个G拿到G后,如果next设置为true, 会有1/2的机会将G放在P的本地队列的next上执行,否则放在P的本地运行队列队末,此时如果本地队里已满,则会触发本地运行队列向全局运行队列迁移动作,期间本地运行队列的一半将迁移到全局运行队列调度首先以1/60的概率从全局运行列获取可用的G。 期间可能会触发全局运行队列向本地运行队列迁移的动作,此时会拿全局队列的 1/GOM 查看全文

Go扩容

切片扩容容量如果期望的容量是当前容量的两倍则使用期望容量如果期望容量小于1024则扩容到当前容量的2倍如果期望容量大于1024则扩容当前容量的25%直到满足当前容量需求出触发条只有添加新元素后的cap不满足时才会触发扩容, 扩容后返回一个新的slice结构体处理方式slice=append(slice, one)        扩容后新的slice结构体赋给原sliceappend(slice, one)        则返回一个新slicehash扩容初始化当map中的桶的数量多于24时才会有溢出桶的存在,数量为2^B-4个,B为正常桶的数量hash桶最多存储8个对象,如果超出则需要存储在溢 查看全文

GO值复制

GO语言本身是值传递,先给结论,再看case.标量类型是赋值是值传递,如int float string数组和结构体赋值也是值传递,如[2]string  struct{}指针赋值也是值传递,只不过传递的是地址而已map和slice赋值是引用传递,如map[string][string] []string字符串遍历,得到值是字符,索引是不连续的。如下标量类型func TestInt(t *testing.T) {    num1 := 123    num2 := num1    num1 = 456    fmt.Println(& 查看全文

goland The selected directory is not a valid home for Go SDK 解决

The selected directory is not a valid home for Go SDK 解决方案Navigate to the Go SDK root (execute go env and find GOROOT entry), then navigate to src/runtime/internal/sys inside the Go SDK root.Edit zversion.go file and add an entry on a new line: const theVersion = `go1.17`zversion.go// Code generated by go too 查看全文

MySQL的事务隔离级别及MVCC机制

MySQL实现了四种隔离级别,分别是读未提交(RU)、读已提交(RC)、可重复读(RR)和串行化读(SERIALIZABLE)。读未提交(RU):不管其他事务是否提交更新都可以实时看到最新数据,隔离级别最低,脏读的问题没有解决,更别说可重复读和幻读了。读已提交(RC):只可以看到其他事务已经提交事务后的更新,解决了脏读的问题,但没有解决可重复读和幻读。可重复读(RR):在事务中的任何时间点看查询到的数据都是一样的,解决了脏读和可重复读的问题,但没有解决幻读的问题。串行化读(SERIALIZABLE)所有数据库请求都只用一个线程执行,不管读写并发的事情,所以在这个隔离级别下隔离效果最好,性能最差。相关概念解析脏读:同时两个事务A和B,  A修改了记录1 ,同时B读取了记录1,此时A记录回滚,那么B读到的就是一条未提交的脏数据,RU级别就会出现 查看全文
加载更多

js使用protobuf——支持web端交互使用

ProtoBuf简介Protocol Buffer的简称。Google旗下的一款平台无关,语言无关,可扩展的序列化结构数据格式,适合用于数据存储,作为不同应用、语言之间相互通信的数据交换格式,序列化后的数据为二进制数据(pb格式的数据),类比XML、JSON。protobuf最先支持C++ C# Go JAVA Python PHP语言,最近发布的代码包又支持了JavaScript,今天就来谈下,js怎么使用protobuf。官网地址 https://developers.google.com/protocol-buffers/安装protobuf编译器从github上下载编译器源码安装包,https://github.com/protocolbuffers/protobuf/releases 编译安装, 目前仅支持unix类型的系统。定义 查看全文

分享345本关于java的pdf电子书,附书单和下载链接

1 21天学通JAVA 第6版 链接:https://pan.baidu.com/s/1HrK-UaWrBLwYqYThy_oYVQ 密码:q2vx2 EFFECTIVE JAVA  第2版 链接:https://pan.baidu.com/s/1rKMWRqGjY-sZfzZi_FJ1Kw 密码:97rs3 Effective_Java_中文版 链接:https://pan.baidu.com/s/18rS4QvzU_D7WeT8IqNpNZg 密码:mh614 HEAD FIRST JAVA(中文版)第二版 链接:https://pan.baidu.com/s/1SFz6DicXxZzaVl9YhepWAg 密码:r2of5 JAVA 8 编程参考官方教程(第9版) 链接:https://pan.baidu.com/s/1IS-V5pJ 查看全文

Ubuntu安装L2TP VPN服务器和客户端

一、服务器端一键安装l2tp,参考网址 https://teddysun.com/448.html wget --no-check-certificate https://raw.githubusercontent.com/teddysun/across/master/l2tp.sh  chmod +x l2tp.sh   ./l2tp.sh安装的时候IP-Range保持默认,PSK为预授权秘钥(预共享秘钥),用户名和密码都要设置并记住,相当于一个账号。然后再次验证ipsec(L2TP)并重启相关服务service ipsec restart   service xl2tpd restart   查看全文

多种机器学习算法优缺点总结

  1、分类算法2、回归算法3、集成算法决策树(Decision Tree)支持向量机(SVM)K近邻(kNN,k-NearestNeighbor)朴素贝叶斯逻辑回归线性回归多项式回归Adaboost算法GBDT(梯度提升决策树)XGBoost随机森林a、bagging(Bootstrapped Aggregation)b、boosting算法1、聚类算法:Kmeans2、关联规则算法:Apriori一、无监督算法:二、有监督算法一、无监督算法:1、聚类算法:KmeansKmeans中心思想:事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新计算每个类的质心(即为类中心),重复这样的过程,直到质心不再改变,最终就确定 查看全文

(新手上路)nginx运行报错:could not open error log file和mkdir fail

问题:nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (13: Permission denied) 2018/08/12 00:01:05 [emerg] 1977#0: mkdir() "/usr/local/nginx/client_body_temp" failed (13: Permission denied)分析:error.log 日志记录文件 查看全文

2020最新phpstorm激活码

jetbrains全家桶的激活码,这个激活码肯定是没问题的,亲测可用!分享给大家,免得再浪费时间去找老半天。激活码1812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNIIiwibGljZW5zZWVOYW1lIjoi5q2j54mIIOaOiOadgyIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IklJIiwiZmFsbGJhY2tEYXRlIjoiMjAxOS0wNC0yMSIsInBhaWRVcFRvIjoiMjAyMC0wNC0yMCJ9LHsiY29kZSI6IkF 查看全文

hive默认分隔符

hive的默认分割符,hive使用不可见的字符作为分割符,如下表。分隔符描述\n行分隔符^A字段分隔符,八进制表示为\001, ^Barray或struct中为元素分隔符,map中为key-value分隔符\002^Cmap中为key和value间的分隔符\003php中使用是使用分隔符的八进制表示方式,并使用双引号引住。eg,implode("\001", $arrFields);vim中:set list可以查看到hive数据文件的默认分隔符显示指定创建表时的默认分割符。eg,create EXTERNAL table IF NOT EXISTS tbl_test (   id   &nb 查看全文

Python 求1~n的累加和

版权声明:。          https://blog.csdn.net/weixin_43778797/article/details/90243289n = int(input("请输入要求累加到的数:")) sum = 0 for i in range(n+1):  # 实际遍历到n     sum += i print(sum) 查看全文
加载更多