摘要:
字符串 type _string struct { elements *byte // 引用着底层的字节 len int // 字符串中的字节数,获取长度O(1) } 对于字符串比较,编译器有两个优化: 若长度不相等,则字符串不相等,O(1) 若指针相等,长度大的字符串大,O(1) slice sl 阅读全文
posted @ 2020-05-27 22:42
是的哟
阅读(819)
评论(0)
推荐(0)
摘要:
go newproc new newobject make makeslice,makechan,makemap,makemap_small...... <- chansend1,chanrecv1,chanrecv2 close closechan select selectgo make、new 阅读全文
posted @ 2020-05-27 22:38
是的哟
阅读(228)
评论(0)
推荐(0)
摘要:
futex futex(&f, FUTEX_WAIT, val, t, nil, 0) 选项FUTEX_WAIT,表示使用mmap在内核态和用户态之间共享f的内存,测试f的值如果等于val则休眠时间t futex(&f, FUTEX_WAKE, cnt, nil, nil, 0) 选项FUTEX_W 阅读全文
posted @ 2020-05-27 22:37
是的哟
阅读(338)
评论(0)
推荐(0)
摘要:
在执行调度循环 runtime.schedule 时,或者系统监控sysmon时,会检查是否有timer就绪。 每次把堆顶timer的when和当前时间作比较,when<nowtime则执行timer里的f,并删除当前timer,如果是ticker,则计算下一次触发的时间,加入到堆中 timer存放 阅读全文
posted @ 2020-05-27 22:35
是的哟
阅读(220)
评论(0)
推荐(0)
摘要:
sync.Cond type Cond struct { L Locker notify notifyList } func NewCond(l Locker) *Cond { return &Cond{L: l} } func (c *Cond) Wait() { t := runtime_not 阅读全文
posted @ 2020-05-27 22:34
是的哟
阅读(344)
评论(0)
推荐(0)
摘要:
接口 type Context interface { Deadline() (deadline time.Time, ok bool) //若实现了超时控制,该方法返回超时时间,true。否则ok为false Done() <-chan struct{} // 通过关闭channel进行通知 Er 阅读全文
posted @ 2020-05-27 22:30
是的哟
阅读(219)
评论(0)
推荐(0)
摘要:
var x, y int go func() { x = 1 fmt.Print("y:", y, " ") }() go func() { y = 1 fmt.Print("x:", x, " ") }() 结果可能为 y:0 x:0 , 编译器看到打印和赋值的变量不同,认为交换两条语句不会影响结 阅读全文
posted @ 2020-05-27 22:24
是的哟
阅读(486)
评论(0)
推荐(0)
摘要:
需要poll的文件描述符都被设置成非阻塞的,加入到epoll里,对应的pollDesc放到epoll event的data域中, 某个goroutine读写fd被阻塞时,runtime会把 fd 对应的 pollDesc 里的 rg / wg 字段设置为这个 g,然后将 g 放到系统的等待队列中 调 阅读全文
posted @ 2020-05-27 22:20
是的哟
阅读(616)
评论(0)
推荐(0)
摘要:
CALL runtime·args(SB) // 整理命令行参数 CALL runtime·osinit(SB) // 确定cpu核心数 CALL runtime·schedinit(SB) // 初始化核心组件 CALL runtime·newproc(SB) // 创建主goroutine即ru 阅读全文
posted @ 2020-05-27 22:19
是的哟
阅读(661)
评论(0)
推荐(0)
摘要:
启动m,进入调度循环 gosave初始化g0.sched执行现场,acquirep绑定p,schedule调度 mstart -> mstart1 -> save -> acquirep -> schedule -> mexit 休眠m gc时,或找不到g的m,或者因执行时间过长、系统调用阻塞等原因 阅读全文
posted @ 2020-05-27 22:17
是的哟
阅读(656)
评论(0)
推荐(0)
摘要:
抢占的时机 gc时,抢占所有g 系统监控发现长时间阻塞于系统调用或者运行时间过长时,抢占该g 同步协作式调度 主动用户让权:通过 runtime.Gosched 主动让出执行机会; 主动调度弃权:当发生执行栈分段时,检查自身的抢占标记,决定是否继续执行; 异步抢占式调度 被动监控抢占:当 G 阻塞在 阅读全文
posted @ 2020-05-27 22:14
是的哟
阅读(602)
评论(0)
推荐(0)
摘要:
锁定g和m 在执⾏ cgo 调⽤时,会⽤ lockOSThread 将 G 锁定在当前线程 锁定操作很简单,只需设置 G.lockedm 和 M.lockedg 即可 lockedm 会休眠,直到某⼈将 lockedg 交给它。⽽不幸拿到 lockedg 的 M, 则要将 lockedg 连同 P 阅读全文
posted @ 2020-05-27 22:13
是的哟
阅读(504)
评论(0)
推荐(0)
摘要:
动态栈 栈是自动增长的,默认2KB,32位架构最大250M,64位架构最大1G,可用runtime/debug.SetMaxStack来设置 每次执行函数调用时Go的runtime都会进行检测,若当前栈的大小不够用,则会触发“中断”,从当前函数进入到Go的运行时库,Go的运行时库会保存此时的函数上下 阅读全文
posted @ 2020-05-27 22:10
是的哟
阅读(179)
评论(0)
推荐(0)
摘要:
len 和 cap 调用 实参类型 结果 len(s) [n]T, *[n]T 数组长度(== n) []T 切片长度 chan T 信道缓存中元素队列的长度 map[K]T 映射长度(已定义键的数量) string type 字符串的字节长度 cap(s) [n]T, *[n]T 数组长度(== 阅读全文
posted @ 2020-05-27 22:07
是的哟
阅读(208)
评论(0)
推荐(0)
摘要:
字符串内容不能更改,可包含byte值0,len()获取的是字节数量, s[i]返回第i个字节的值,类型是uint8,&s[i] 是非法的 s:=s1+s2 会创建一个新的字符串 t:=s[3:8] 不会创建一个新的字符串 //应该是创建了新的直接部分,而引用相同的底层数据 待验证 源码 for i, 阅读全文
posted @ 2020-05-27 21:54
是的哟
阅读(575)
评论(0)
推荐(0)
摘要:
数组 数组是值,将一个数组变量赋值给另一个变量会复制其所有元素。将数组传入函数会复制其所有元素。可以传数组指针,但切片是更好的做法 数组的大小是其类型的一部分。类型 [10]int 和 [20]int 是不同的。长度必须为常量 长度为零的数组的尺寸为零;元素类型尺寸为零的任意长度的数组类型的尺寸也为 阅读全文
posted @ 2020-05-27 21:47
是的哟
阅读(188)
评论(0)
推荐(0)
摘要:
map是引用类型,底层是哈希表,操作是常数时间的 复制map,新旧map共享同一个底层哈希表,在函数里对map进行操作,结果对调用者可见 var m map[int]string,m是nil,底层没有引用哈希表, 不能向nil值的map添加元素,其他大部分对nil值的map的操作都是合法的,行为类似 阅读全文
posted @ 2020-05-27 21:07
是的哟
阅读(256)
评论(0)
推荐(0)
摘要:
形参(或结果)列表中,名称要么都存在,要么都不存在 指定了返回形参的名字,在进入函数时,返回值会被初始化为自身类型的零值 若所有的返回值都有名称,return语句可以省略操作数,这被称为bare return 若只有一个没有名称的结果,结果列表可以不加括号 未初始化的函数类型变量的值为nil,调用n 阅读全文
posted @ 2020-05-27 20:59
是的哟
阅读(240)
评论(0)
推荐(0)
摘要:
type abc struct { x, y int u float32 "标注" _ float32 // padding A *[]int F func() } var a abc // 声明变量,会开辟一段内存 t := &a.x // 对成员取地址 . 的优先级比 * 和 & 高 // 用m 阅读全文
posted @ 2020-05-27 20:54
是的哟
阅读(204)
评论(0)
推荐(0)
摘要:
接收者类型必须为形式 T 或 *T, T 称为接收者的 基础类型, 它不能为指针或接口类型 声明 func (p *Point) Scale(factor float64) {...} 将接收者类型为 *Point 的方法 Scale 绑定至基础类型 Point。 必须在同一包中声明方法。 给类型别 阅读全文
posted @ 2020-05-27 20:49
是的哟
阅读(175)
评论(0)
推荐(0)
摘要:
接口值由动态类型和动态值组成 未初始化的接口类型变量的值为nil,其动态类型和动态值都是nil,调用nil接口值上的方法会产生panic 所有类型都实现了空接口interface{},任意值都能赋给空接口类型 接口里方法的名字必须是唯一的,名字相同,参数或返回值不同,也会报错 接口可以内嵌其他接口, 阅读全文
posted @ 2020-05-27 20:45
是的哟
阅读(172)
评论(0)
推荐(0)
摘要:
main goroutine返回时,所有goroutine都会被直接打断,程序退出 go f(x,y),f、x、y的求值发生在当前goroutine中,f的执行发生在新goroutine中 goroutine运行在相同的地址空间中,访问共享内存需要同步 未初始化的channel类型变量的值为nil, 阅读全文
posted @ 2020-05-27 20:41
是的哟
阅读(119)
评论(0)
推荐(0)
摘要:
go语言101,对引用路径作了比较详细的解释 一个代码包可以由若干Go源文件组成。一个代码包的源文件须都处于同一个目录下。 一个目录(不包含子目录)下的所有源文件必须都处于同一个代码包中,亦即这些源文件开头的package pkgname语句必须一致。 所以,一个代码包对应着一个目录(不包含子目录) 阅读全文
posted @ 2020-05-27 20:38
是的哟
阅读(945)
评论(0)
推荐(0)
摘要:
func h() []*int { s := []*int{new(int), new(int), new(int), new(int)} // 使用此s切片 ... s[0], s[len(s)-1] = nil, nil // 指针指向的两个int可以被回收 return s[1:3:3] } 阅读全文
posted @ 2020-05-27 20:36
是的哟
阅读(1736)
评论(0)
推荐(0)
摘要:
func main() { // 可变参数是interface{}类型, var a = []interface{}{1, 2, 3} fmt.Println(a) // 将整个a当作一个interface{},输出 [1,2,3] fmt.Println(a...) // 将a当作interfac 阅读全文
posted @ 2020-05-27 20:35
是的哟
阅读(145)
评论(0)
推荐(0)
摘要:
mutex := make(chan struct{}, 1) // 容量必须为1 increase := func() { mutex <- struct{}{} // 加锁 ...... <-mutex // 解锁 } mutex := make(chan struct{}, 1) mutex 阅读全文
posted @ 2020-05-27 20:33
是的哟
阅读(274)
评论(0)
推荐(0)
摘要:
func source(c chan<- int32) { ra, rb := rand.Int31(), rand.Intn(3) + 1 time.Sleep(time.Duration(rb) * time.Second) // 睡眠1~3秒 c <- ra } func main() { r 阅读全文
posted @ 2020-05-27 20:32
是的哟
阅读(168)
评论(0)
推荐(0)
摘要:
func longTimeRequest() <-chan int32 { r := make(chan int32) go func() { time.Sleep(time.Second * 3) // 模拟一个工作负载 r <- rand.Int31n(100) }() return r } f 阅读全文
posted @ 2020-05-27 20:31
是的哟
阅读(368)
评论(0)
推荐(0)
摘要:
超时 select { case v := <-in: fmt.Println(v) case <-time.After(time.Second): return } 非阻塞 select { case v := <-in: // 尝试接收 fmt.Println(v) default: } 阅读全文
posted @ 2020-05-27 20:30
是的哟
阅读(212)
评论(0)
推荐(0)
摘要:
type ( subscriber chan interface{} // 订阅者为一个管道 topicFunc func(v interface{}) bool // 主题为一个过滤器 ) // 发布者对象 type Publisher struct { m sync.RWMutex // 读写锁 阅读全文
posted @ 2020-05-27 20:29
是的哟
阅读(302)
评论(0)
推荐(0)
摘要:
func Producer(factor int, out chan<- int) { for i := 0; ; i++ { out <- i*factor } } func Consumer(in <-chan int) { for v := range in { fmt.Println(v) 阅读全文
posted @ 2020-05-27 20:28
是的哟
阅读(185)
评论(0)
推荐(0)
摘要:
通过关闭channel来广播消息 waitgroup的目的,是在main关闭channel后,给goroutine一些时间,完成某些操作 func worker(wg *sync.WaitGroup, cannel chan bool) { defer wg.Done() for { select 阅读全文
posted @ 2020-05-27 20:26
是的哟
阅读(499)
评论(0)
推荐(0)
摘要:
ch := make(chan struct{}) for _, f := range filenames { go func(f string) { ..... ch <- struct{}{} }(f) } for range filenames { <-ch } // 等待goroutine执 阅读全文
posted @ 2020-05-27 20:25
是的哟
阅读(416)
评论(0)
推荐(0)
摘要:
for _, filename := range filenames { f, err := os.Open(filename) if err != nil { return err } defer f.Close() // 会打开大量的文件 ...... } for _, filename := 阅读全文
posted @ 2020-05-27 20:24
是的哟
阅读(758)
评论(0)
推荐(0)
摘要:
var sem = make(chan int, 100) // func handle(r *Request) { sem <- 1 process(r) // 可以控制 process 的并发数 <-sem } func Serve(queue chan *Request) { for { re 阅读全文
posted @ 2020-05-27 20:20
是的哟
阅读(1014)
评论(0)
推荐(0)
摘要:
reflect.Type reflect.Value v := reflect.TypeOf(3) // 接受interface{},返回reflect.Type类型的值,该值包含参数的动态类型 fmt包的%T参数,使用reflect.TypeOf来输出 v := reflect.ValueOf(3 阅读全文
posted @ 2020-05-27 20:13
是的哟
阅读(159)
评论(0)
推荐(0)
摘要:
Ticker tick在不使用时,应手动stop,否则会造成timer泄露 func Tick(d Duration) <-chan Time func NewTicker(d Duration) *Ticker func (t *Ticker) Stop() for t := range time 阅读全文
posted @ 2020-05-27 20:12
是的哟
阅读(175)
评论(0)
推荐(0)
摘要:
sync包里的对象,大多是不能复制的 锁 sync.Mutex的Lock()方法,是不能重入的 var mu sync.Mutex // 零值表示未被锁定的互斥量 mu.Lock() defer mu.Unlock() // 对未锁定的锁进行Unlock,会导致panic var mu sync.R 阅读全文
posted @ 2020-05-27 20:11
是的哟
阅读(217)
评论(0)
推荐(0)
摘要:
用join代替子查询,join也尽量少用 join用小的结果集驱动大的结果集,第二个表要建索引, mysql会用第一张表的每条数据去第二张表中查找 尽量定义成not null,并设置默认值 只有一行数据满足条件,要使用limit 1,找到后就停止 列不要太多,指定需要的列,避免select * in 阅读全文
posted @ 2020-05-27 20:05
是的哟
阅读(110)
评论(0)
推荐(0)
摘要:
数据类型越小越好,越简单越好, 整型比字符串好,ip可以转为整型, 整型比浮点型好,金额可以乘以一个倍数,转为整型 内置的日期和时间类型比char好,timestamp比datetime好 少用text类型 数据类型 varchar(M)表示最长M个字符,M<=65535,每个值占用实际字节数+1或 阅读全文
posted @ 2020-05-27 20:04
是的哟
阅读(127)
评论(0)
推荐(0)
摘要:
索引记录的是磁盘中的位置,因此不能迁移 MyISAM无论是主键索引还是非主键索引,叶节点存的都是指向表的指针(记录的物理地址) InnoDB主键索引是聚集索引,叶子节点存的是表中的数据,非主键索引是非聚集索引,叶子节点存的是索引列和主键,拿到主键再查询主键索引(回表)。非主键索引也叫二级索引 索引会 阅读全文
posted @ 2020-05-27 20:02
是的哟
阅读(133)
评论(0)
推荐(0)
摘要:
使用 explain 分析语句 id 标识一个子查询 id相同执行顺序由上至下。 id不同,id值越大优先级越高,越先被执行。 id为null时表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中。 select_type 查询类型 type:访问方法 ALL 扫描全表数据 inde 阅读全文
posted @ 2020-05-27 20:00
是的哟
阅读(388)
评论(0)
推荐(0)
摘要:
事务ACID * 原子性(atomicity)一个事务必须被视为一个不可分割的最小工作单元,整个事务中所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作 * 一致性(consistency)数据库总是从一个一致性的状态转换到另外一个一致性的状态,保持完整性约束 阅读全文
posted @ 2020-05-27 19:58
是的哟
阅读(122)
评论(0)
推荐(0)
摘要:
select ... lock in share mode //共享锁 select ... for update //排他锁 行锁的3种算法: record lock:单个行记录上的锁 gap lock:锁定范围,不锁定记录本身,只在RR里使用 next-key lock:锁定范围,并锁定记录本身 阅读全文
posted @ 2020-05-27 19:57
是的哟
阅读(101)
评论(0)
推荐(0)
摘要:
innoDB和myisam的区别 InnoDB支持事物,而MyISAM不支持事物 InnoDB支持行级锁,而MyISAM支持表级锁 InnoDB支持MVCC, 而MyISAM不支持 InnoDB支持外键,而MyISAM不支持 InnoDB支持聚集索引,而MyISAM不支持 InnoDB不支持全文索引 阅读全文
posted @ 2020-05-27 19:55
是的哟
阅读(125)
评论(0)
推荐(0)
摘要:
select a, b, t1.c, a*b as d from t1, db.t2 where a between 3 and 7 or c not in (5,100,124) group by ... having ... order by d desc, e select的列里没有e lim 阅读全文
posted @ 2020-05-27 19:54
是的哟
阅读(206)
评论(0)
推荐(0)
摘要:
where 匹配时默认不区分大小写 = <> != < <= > >= in is null is not null between 3 and 7 包含3和7 and or not () null=null 返回false,null<=>null返回true select a+ifnull(b, 阅读全文
posted @ 2020-05-27 19:53
是的哟
阅读(332)
评论(0)
推荐(0)
摘要:
聚集函数 count sum avg max min sum、avg、max、min 忽略值为null的行 count(*) 统计行数,包含值为null的行 count(a) 统计a不为null的行数,忽略null count(a=1) 统计a为1的行数 select sum(a*b) as c . 阅读全文
posted @ 2020-05-27 19:52
是的哟
阅读(164)
评论(0)
推荐(0)
摘要:
通配符 where name like 'abc%' like '%' 不会匹配 null 下划线_匹配一个字符 like '[a-z]' like '[^cde]' 正则 regexp 'abc' 等价于like '%abc%' regexp binary 'a|B|c' 区分大小写,匹配 a 或 阅读全文
posted @ 2020-05-27 19:51
是的哟
阅读(123)
评论(0)
推荐(0)
摘要:
函数 字符串 length locate substring soundex trim ltrim rtrim upper lower left right 日期和时间 尽量用yyyy-mm-dd格式的日期 AddDate() 增加一个日期 AddTime() 增加一个时间 Now() 返回当前日期 阅读全文
posted @ 2020-05-27 19:50
是的哟
阅读(118)
评论(0)
推荐(0)
摘要:
insert insert [into] t [(col_name,...)] values(v1,v2...) 如果省略了列名,那么values里必须有所有列的值,自增列的值为null 如果指定了部分列名,其他的列必须允许为null或指定了默认值 连续插入 insert into table(na 阅读全文
posted @ 2020-05-27 19:49
是的哟
阅读(257)
评论(0)
推荐(0)
摘要:
水平分表 range,1~10000一个表,10001~20000一个表 hash,取模 地理区域,华东,华西 时间,一年一个表 分区,对客户端是透明的,分区字段必须是主键的一部分 create table article( id int auto_increment PRIMARY KEY, ti 阅读全文
posted @ 2020-05-27 19:48
是的哟
阅读(173)
评论(0)
推荐(0)
摘要:
视图的好处 重用sql语句,简化复杂语句,屏蔽查询细节 保护数据,用户只看到部分字段 视图可以嵌套,可使用order by,不能索引,不能有触发器和默认值 有的视图可以执行更新操作,mysql不支持物化视图 视图的两种算法 Merge:合并,执行的时候,将视图的sql语句与外部查询语句混合在一起,最 阅读全文
posted @ 2020-05-27 19:47
是的哟
阅读(145)
评论(0)
推荐(0)
摘要:
mysql --help | grep my.cnf 查看配置文件 参数文件 查看参数变量: 通过命令 show variables [like 'abc'\G]; 或者查看 information_schema下的global_variables视图 修改动态变量:分为会话范围和全局范围修改 se 阅读全文
posted @ 2020-05-27 19:44
是的哟
阅读(283)
评论(0)
推荐(0)
摘要:
表是根据主键顺序组织存放的,这种方式称为索引组织表 没定义主键,则判断是否有非空的唯一索引,如果有就用该列作为主键,没有的话自动创建6字节的指针作为主键 可通过 select a,b,c,_rowid 来判断表的主键,_rowid会显示单列主键列的值 逻辑存储结构 常见的段有数据段、索引段、回滚段等 阅读全文
posted @ 2020-05-27 19:42
是的哟
阅读(289)
评论(0)
推荐(0)
摘要:
MySQL 是单进程多线程的 MySQL执行过程 连接器,管理连接,权限验证 查询缓存 分析器,词法分析,语法分析,语法树,检查语法是否有错误 预处理器,进一步检查解析树是否合法,如表名是否存在等 优化器,选择索引,生成执行计划 执行器,操作引擎,返回结果,并将结果缓存 如果查询中包含任何用户自定义 阅读全文
posted @ 2020-05-27 19:39
是的哟
阅读(119)
评论(0)
推荐(0)
摘要:
客户端分区:在客户端决定key该放在哪个节点上 代理分区:客户端把请求发给代理,代理按规则请求某个节点,将结果返回给客户端 查询路由:随机请求一个节点,该节点告诉客户端key在哪个节点上 集群的缺点:对多个key的操作通常不被支持,例如求两个集合的交集,他们可能在不同的节点上 操作多个key,不支持 阅读全文
posted @ 2020-05-27 19:37
是的哟
阅读(117)
评论(0)
推荐(0)
摘要:
复制 向服务器127.0.0.1:12345 发送 slaveof 127.0.0.1 6379 127.0.0.1:12345会成为127.0.0.1:6379的从服务器 也可以设置slaveof选项 复制时需要执行同步和命令传播两个操作 同步: 从向主发送psync命令,主执行bgSave命令, 阅读全文
posted @ 2020-05-27 19:36
是的哟
阅读(138)
评论(0)
推荐(0)
摘要:
估计值准确度80% 12k字节内存,2^64个不同元素 pfAdd k v1 v2 添加,如果估计的基数改变则返回1,否则返回0 pfCount k 返回基数 pfCount k1 k2... 返回并集的基数 O(n),n为集合的个数 pfMerge d k1 k2.. 将ki合并到d里, O(n) 阅读全文
posted @ 2020-05-27 19:35
是的哟
阅读(133)
评论(0)
推荐(0)
摘要:
升序排序,指按score升序排序,score相同,按v字典序升序。降序排序同理。 withscores返回v和score,不使用withscores,只返回v 下标区间 i、j从0开始,可为负数, 值区间min、max可为 -inf和+inf,默认闭区间, '('表示开区间,如zcount k (1 阅读全文
posted @ 2020-05-27 19:34
是的哟
阅读(184)
评论(0)
推荐(0)
摘要:
集合元素不能重复 sismember k v 是否存在 scard k 返回数量 sadd k v1 v2 添加,k不存在则创建 smembers k 返回所有元素 srem k v1 v2 移出元素 smove s d v 将v从s移到d里 spop k 随机移出一个元素并返回 srandmemb 阅读全文
posted @ 2020-05-27 19:33
是的哟
阅读(136)
评论(0)
推荐(0)
摘要:
没有元素会阻塞,直到有元素或超时 t 秒后,t为0则永久阻塞 blpop k1 k2 t 左弹并返回 brpop k1 k2 t 右弹并返回 brpoplpush s d t s右弹,左插到d,并返回 rpoplpush s d s右弹,左插到d,并返回 llen k 返回长度 linsert k 阅读全文
posted @ 2020-05-27 19:32
是的哟
阅读(166)
评论(0)
推荐(0)
摘要:
hexists k f 查看k中是否存在字段f hlen k 字段数量 hdel k f1 f2 删除字段 hset k f v 将k中f设为v hsetnx k f v f不存在时才将f设为v hget k f 返回k中f的值 hmset k f1 v1 f2 v2 设置多个字段的值 hmget 阅读全文
posted @ 2020-05-27 19:31
是的哟
阅读(150)
评论(0)
推荐(0)
摘要:
set k v setEx k s v s秒过期 pSetEx k m v m毫秒过期 setNx k v k不存在时才设置 get k getSet k v k设为v,并返回k的旧值 mSet k1 v1 k2 v2 设置多个值 mSetNx k1 v1 k2 v2 当所有k都不存在时,设置多个值 阅读全文
posted @ 2020-05-27 19:30
是的哟
阅读(100)
评论(0)
推荐(0)
摘要:
简单动态字符串 ( simple dynamic string,SDS) SDS的应用 在redis里,c字符串只会用作字面量,用在不会更改的地方,例如打印日志。 需要修改的字符串,用SDS表示 set msg "hello world" redis将创建一个键值对,键是一个字符串对象,对象的底层实 阅读全文
posted @ 2020-05-27 19:29
是的哟
阅读(185)
评论(0)
推荐(0)
摘要:
定时删除:创建一个定时器,在键过期时立即删除。 为什么不用定时删除策略:虽然内存及时释放,但太消耗 CPU 资源。 定期删除,设置了 expire 的键存储在一个独立的字典中,默认每 100ms 随机选择 20 个 key,删除其中已过期的 key。如果过期 key 比例超过 1/4,那就重复这一步 阅读全文
posted @ 2020-05-27 19:26
是的哟
阅读(215)
评论(0)
推荐(0)
摘要:
事务执行时,不会中断去执行其他命令 不支持回滚,执行时某个命令出错,其他命令也会继续执行 multi set "name" "zhangsan" get "name" set "age" 18 get "age" exec multi 将客户端从非事务状态切换到事务状态 非事务状态,客户端发送的命令 阅读全文
posted @ 2020-05-27 19:25
是的哟
阅读(115)
评论(0)
推荐(0)
摘要:
RDB 手动或定期执行,将数据库状态保存到文件中 手动save:会阻塞服务器进程,拒绝客户端的所有请求; 自动bgsave:fork子进程,不会阻塞,写时复制copy on write bgsave执行过程中会拒绝save、bgsave、bgReWriteAOF 服务器端可同时配置多个save选项, 阅读全文
posted @ 2020-05-27 19:23
是的哟
阅读(126)
评论(0)
推荐(0)
摘要:
hash、list、set、sorted set,可存储2^32-1个元素 string长度为512m字节,即2^(9+10+10+3)=2^32 优点:速度快,数据类型多,可持久化,支持主从备份,水平扩展 快的原因:c语言开发 纯内存操作 单进程单线程 epoll多路复用 高效的数据结构 每次传输 阅读全文
posted @ 2020-05-27 19:22
是的哟
阅读(103)
评论(0)
推荐(0)

浙公网安备 33010602011771号