跳到主要内容

基于Netty实现简单的Redis服务端

· 阅读需 8 分钟

前言

在上一篇的基于Netty实现简单的Redis客户端 - 木然轩 - 文剑木然的网络日志中我介绍了如何使用Netty来编写一个简单的Redis客户端。在本篇中,将使用Netty实现一个简单的Redis服务端。

目标

完整的Redis服务端的功能是很复杂的,由于是学习目的,这里只实现Redis最基本的一项功能,就是存取字符串,也就是下面的两个命令:

SET key value
GET key

实现

由于Redis的协议在上一篇已经提过了,本篇就不再赘述了,直接上实现的过程。

基于Netty实现简单的Redis客户端

· 阅读需 9 分钟

前言

Netty是Java中非常常用的网络库,它能自定义网络通信协议,从而实现非常丰富多样的网络功能。Redis是开发中非常常用的中间件,常用于缓存、分布式锁等场合,Redis的协议也非常简单。尽管Netty中自带了Redis的客户端,但是,为了学习,我们将不使用Netty自带的实现,而是自己动手写一个基础版本的Redis客户端。

目标

Redis支持字符串、列表、集合等数据类型,考虑到是学习目的,只实现最最基础的功能,也就是设置与获取字符串的值。具体来说,就是下面两个命令:

# 设置指定key的值
SET key value
# 获取指定key的值
GET key

协议

了解Redis协议

可以从 Redis协议详细规范 来了解Redis的协议。Redis的协议是基于字符串的而不是二进制的,这为协议的处理带来了许多便利。

《Netty实战》读书笔记——Netty的概念及体系结构

· 阅读需 11 分钟

Netty 的核心组件

Channel

可以把 Channel 看作是传入(入站)或者传出(出站)数据的载体。因此,它可以被打开或者被关闭,连接或者断开连接。

回调

一个回调其实就是一个方法,一个指向已经被提供给另外一个方法的方法的引用。这使得后者可以在适当的时候调用前者。回调在广泛的编程场景中都有应用,而且也是在操作完成后通知相关方最常见的方式之一。

Future

Future 提供了另一种在操作完成时通知应用程序的方式。这个对象可以看作是一个异步操作的结果的占位符;它将在未来的某个时刻完成,并提供对其结果的访问。

ChannelFuture

Netty 提供了它自己的实现—— ChannelFuture,用于在执行异步操作的时候使用。 ChannelFuture提供了几种额外的方法,这些方法使得我们能够注册一个或者多个ChannelFutureListener实例。 由ChannelFutureListener提供的通知机制消除了手动检查对应的操作是否完成的必要。 每个 Netty 的出站 I/O 操作都将返回一个ChannelFuture,也就是说,它们都不会阻塞。

简单重置JetBrains试用

· 阅读需 4 分钟

前言

JetBrains公司的IDE十分好用,如Idea、Pycharm等。以前的各种激活方式被相继封杀,现在主要的白嫖方式是通过无限重置试用来实现的。(其实还是有永久激活的,关键词:FineAgent

那么,无限重置试用是怎么做的呢?有没有不装插件一键全部重置试用的方式呢?

原理

JetBrains的重置试用来自Jetbrains系列产品重置试用方法 | 知了,主要是需要安装IDE Eval Reset插件,插件源码:ide-eval-resetter: Reset your IDE eval information.

自JetBrains 2020版本,IDE的试用key保存在用户目录下的 AppData\Roaming\JetBrains<IDE名称>\eval 目录下,以.evaluation.key结尾。这是个非常小的文件,只有8字节,内容如下:

WiFi网络频段优化设置

· 阅读需 4 分钟

最近感觉屋里WiFi速度很慢,ping了下路由器发现延迟非常高,长达数秒,有时甚至还丢包。这样的网络环境下的上网体验可以说很糟糕,在连接内网的机器操作时,都需要卡很久才有反应。由于我离路由器比较远,还隔了墙,并且附近有很多WiFi信号,所以我接收到的WiFi信号就偏弱。为了解决网络问题,我打开了路由器的无线管理界面,发现了信道和信道频宽之类的设置,默认为自动。好奇心驱使,我简单了解了下这些设置,其实厂家默认设置的自动未必是最优设置,通过合理的设定无线参数,可以优化网络。

信道与频宽

在WLAN标准协议里,将2.4GHz频段划分出13个有交叠的信道,每个信道都有自己的中心频率;将5GHz频段分为24个信道,且每个信道都为独立信道。

wifi信道