キャッシュサーバーには何が必要ですか? 基本的にはハッシュテーブル 、それへのネットワークアクセスおよび時代遅れのレコードを削除する手段。
ハッシュテーブルを実装するために、 チェーンベースの衝突解決を備えたバイナリツリー(最良の方法ではないかもしれません)を選択しました。 ネットワークインターフェイスは、ノンブロッキングソケットを使用して実装されました。
サーバーを操作するために、GET、PUT、REMOVEの3つのコマンドの単純なテキストプロトコルを投げました。
キーデータのリクエスト:
GET <key-len> <key> \ r \ n
回答オプション:
- NODATA \ r \ n
- DATA <data-len> <data> \ r \ n
PUT <key-len> <key> <data-len> \ r \ n
<データ> \ r \ n
回答オプション:
- 成功\ r \ n
- HIT \ r \ n (転送されたデータがキャッシュ内のデータと一致する場合)
- 失敗\ r \ n
<key-len> <key>を削除 \ r \ n
回答オプション:
- 成功\ r \ n
- 失敗\ r \ n
刺激的な共同開発を期待して、私は自分の開発をgithubに投稿しました。 Habrのユーザーの中に有能なプログラマを見つけることを本当に期待しています。 githubのプロジェクトアドレス: github.com/mdevils/encached
スレッドセーフハッシュテーブルを整理するための良い方法を教えていただければ幸いです。
サーバー開発計画
新しいチーム:APPEND、PREPEND、INC、DEC、CAS(比較と交換)、STAT、TAG(タグ入力)。
ロックなしのマルチスレッド書き込み/読み取りの完全サポート。
占有メモリの制御。
Windowsで動作します。
これで、デーモンはLinux(x86、x86_64)、Mac OS X(x86、x86_64)のポート2332で実行されます。 おそらくBSDで動作しますが、テストする方法はありません。
サーバーは通常どおりに作成されます-makeコマンドを使用します。 引数「-r」で始まります。 マシンには、FreePascalバージョン2.4.0がインストールされている必要があります。
PS明けましておめでとうございます!