聊聊Rust的Cell和RefCell

内部可变性(interior mutability)是Rust用来表示在一个值的外部看起来是不可变的,但是在内部是可变的。这种模式通常用于在拥有不可变引用的同时修改目标数据。

CellRefCellRust提供的两种内部可变性的实现。Cell是用于Copy类型的,而RefCell是用于非Copy类型的。

不知道你有没有好奇过具体内部可变性应用在什么场景,为啥要分两种实现。

今天我们针对一些场景来聊聊这两个类型的应用。

Read More

掌握Rust:从零开始的所有权之旅

所有权是 Rust 很有意思的一个语言特性,但对于初学者却是一个比较有挑战的内容。

今天尝试用代码示例来聊聊 Rust 的所有权是什么,以及为什么要有所有权。希望能给初学的朋友一点帮助。

Tips:文中代码有相应注释,建议可以先不用纠结细节,关注整体。后边可以再挨个去研究具体代码细节

Read More

深入解读-如何用keycloak管理external auth

提到OAuth2,大家多少都有些了解。

不了解的话可以先看下之前的简单聊聊鉴权背后的那些技术先回顾一下基本概念和流程。

简单来说,以google授权为例,一般就是通过用户授权页面登录google账号,再跳转用code换取到相应权限的token,就可以代表用户去发起一些google api的请求。

直接代码实现这套授权逻辑并不复杂,不过如果还需要接入facebook授权,instagram授权呢,总不能挨个去实现一遍吧。

最好能有一套通用的解决方案来解放双手, 今天我们就聊聊如何用keycloak实现一套通用的身份验证和授权管理方案。

提前说明,无法本地复刻的技术方案不利于理解,也不利于方案探讨。虽然本文章所用代码是使用了rustaxum框架(为啥?因为rust is future!)+keycloak,但从服务启动到keycloak服务及相关配置,都用docker-compose+terraform+shell 脚本化管理,可100%本地复刻,欢迎本地尝试。(当然我说的是Mac下)代码地址: https://github.com/NewbMiao/axum-koans

Read More

聊聊ringbuffer

ringbuffer,是环形缓存区, 或叫环形队列。

不同于一般常见的队列,环形队列收尾相连,通过移动指针来控制队列中内容的读写。

这样做有什么好处呢?

最大的好处是环形队列出队(读取)后,不需要对后续队列内容进行搬移,可以后续由入队(写入)覆盖。

下面来看下一种常见的实现方式, 通过读写指针计数来实现环形队列

计数法实现

先过一遍代码,后边会有图解版说明,方便理解

代码参考自鸟窝无限缓存 channel-chanx

Read More