
后端
文章平均质量分 83
Skying_
这个作者很懒,什么都没留下…
展开
-
redis持久化
redids持久化原因:redis基于内存,当发生故障(关机,断电,进程异常退出等)后,内存中数据会丢失,需要将数据持久化到硬盘。目的:为了故障后将数据加载恢复到内存。方式:redis提供了两种持久化的方式,RDB(快照存储),AOF(Append only file)。其中RDB是默认的持久化方式。RDB方式:快照存储,周期性的将数据快照并保存到硬盘配置:可以在配置文件中配置存储周期save 900 1 #900秒内至少有1个key被更改就执行快照save 300 10 #300内原创 2021-06-10 17:07:30 · 140 阅读 · 0 评论 -
Go channel使用
Go channelChannel 是golang中的管道类型,并且拥有FIFO的特性,经常通过它来实现并发中的数据通信。声明与创建// Chan 声明需要指定类型,此chan只能传递int类型数据var ch chan int // 创建 ch = make(chan int) // Chan 创建, 和其他类型一样,也可以使用':='在创建时声明ch := make(chan int)ch2 := make(chan interface{})数据传递Chan的数据传递需要原创 2021-10-29 15:20:58 · 353 阅读 · 0 评论 -
源码看 golang context
Golang contextContext 是golang中的上下文,用于服务器处理请求相关的协程之间,处理其中的超时中断,取消操作等情况。来自源码的解释:对服务器的传入请求应该创建一个上下文,而对服务器的传出调用应该接受一个上下文。 它们之间的函数调用链必须传播 Context,可以选择将其替换为使用 WithCancel、WithDeadline、WithTimeout 或 WithValue 创建的派生 Context。 当一个上下文被取消时,从它派生的所有上下文也被取消。WithCancel原创 2021-11-05 20:24:23 · 324 阅读 · 0 评论 -
Go GC垃圾回收解析
Golang GC 垃圾回收Garbage Collection, 垃圾回收,是自动管理内存的机制。为什么需要GC在C/C++中,释放堆上内存需要程序员手动处理,未释放内存可能会出现内存泄漏,所以对程序员自身要求较高。在python,java,go 中都有自己的自动垃圾回收机制,可以自动在合适的时机释放无用内存,从而解放了程序员。但与之而来的代价也是在gc的时候,会耗用无关计算机资源,甚至STW,影响正常程序运行,不过随着go版本的迭代,go垃圾回收对正常程序的影响微乎其微。C/C++中手动管原创 2021-11-07 00:53:13 · 699 阅读 · 0 评论 -
redis分布式锁的各种实现方案以及问题点分析
redis分布式锁的各种实现方案以及问题点分析redis的分布式锁暂时发现如下几种实现:通过 SETNX, GET, GETSET实现。通过 SET key value NX EX milliseconds 实现。RedissonRedlockCAP定理一致性(Consistency),可用性(Availability), 分区容错性(Partition Tolerance)。任何一个分布式系统最多同时满足以上两点,所以通常需要牺牲其中一点来最大化满足另两点。上面几种实现方式各有问题,原创 2021-06-17 11:43:44 · 329 阅读 · 0 评论 -
redis事务与管道
Redis事务与管道事务Redis事务允许在一次单独的步骤中执行一组命令,Reids事务有两个属性:事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis事务是原子的。原子意味着要么所有的命令都执行,要么都不执行(执行出错也算执行);事务相关命令如下:MULTI: 开启事务,之后的命令会加入命令队列,命令不会立即执行。EXEC: 将命令队列中的所有命令顺序执行。执行结束自动关闭事务。DISCARD: 取原创 2021-06-15 18:16:54 · 678 阅读 · 0 评论 -
redis源码分析,SDS动态字符串
redis源码分析,SDS动态字符串SDS [basic redis v6.0],源码路径: src/sds.c, src/sds.h, src/sdsalloc.hredis中的字符串类型为SDS(C dynamic strings)是一个动态类型字符串。 可以无限增长,理论上长度最大2^64下面是redis中 SDS的结构struct __attribute__ ((__packed__)) sdshdr32 { uint32_t len; /* buf已用长度 */ uint3原创 2021-04-19 18:51:58 · 246 阅读 · 0 评论