Redis の紹介 Redis は完全にオープンソースで無料であり、BSD プロトコルに準拠しており、高性能なキー値データベースです。 Redis やその他のキー値キャッシュ製品には、次の 3 つの特徴があります。
利点
ダウンロードとインストール ダウンロードして解凍する http://download.redis.io/releases/redis-5.0.3.tar.gz をダウンロードしてください tar xzf redis-5.0.3.tar.gz フォルダを/usr/local/に移動する mv redis-5.0.3 /usr/local/ フォルダに移動してテストをコンパイルします /usr/local/redis-5.0.3 をコピーします sudo テストを実行する コンパイルしてインストールする sudo インストール Redisを起動する redis サーバー セカンダリキャッシュとしてのMySQLとRedis アクセス数が多いデータの場合、データをより速く取得するために、データベースから取得したデータをキャッシュする必要があります。 プロジェクトでRedisキャッシュプロセスを使用する
データ キャッシュでは、同期の問題を考慮する必要があります。データがキャッシュされている場合、データを照会するときに、キャッシュ内にデータがあれば、データベースを照会せずにキャッシュされたデータが直接返されます。データベース データが変更されると、データベースの不整合が発生する可能性があります。データベースを変更するたびに、対応するキャッシュ データを削除して、再度クエリを実行するときにデータベースをクエリしてキャッシュするようにすることを検討できます。 実装手順 接続プールを初期化するためのredisPool.goファイルを作成する パッケージ redigo_pool 輸入 ( "フラグ" 「github.com/garyburd/redigo/redis」 "時間" ) var ( プール *redis.Pool RedisServer = flag.String("redisServer", ":6379", "") ) 関数init() { プール = &redis.Pool{ MaxIdle: 3, // アイドルリンクの最大数。Redis 接続がない場合でも、N 個のアイドルリンクはクリアされずに維持されることを示します。MaxActive: 3, // アクティブ接続の最大数。同時に存在するリンクの最大数を示します。IdleTimeout: 240 * time.Second, // アイドルリンクの最大待機時間。この時間を超えると、アイドルが閉じられます。Dial: func() (redis.Conn, error) { c, err := redis.Dial("tcp", *RedisServer) err != nil の場合 { nil、エラーを返す } c を返す、エラー }, TestOnBorrow: func(c redis.Conn, t time.Time) エラー { time.Since(t) < time.Minute の場合 nilを返す } _, エラー:= c.Do("PING") エラーを返す }, } } セカンダリキャッシュを実装するためのmain.goファイルを作成する パッケージメイン 輸入 ( 「データベース/SQL」 「エンコーディング/json」 「fmt」 「github.com/garyburd/redigo/redis」 _ "github.com/go-sql-driver/mysql" 「strconv」 「web/redis/redigo_pool」 _ "web/redis/redigo_pool" ) タイプPerson構造体{ ID int `db:"id"` 名前文字列 `db:"name"` 年齢 int `db:"age"` Rmb int `db:"rmb"` } 関数main() { var コマンド文字列 のために{ fmt.Println("コマンドを入力してください") fmt.Scan(&cmd) スイッチコマンド{ ケース「getall」: すべて取得() デフォルト: fmt.Println("他のコマンドを認識できません") } fmt.Println() } } getAll()関数{ //接続プールから接続を取得します conn := redigo_pool.Pool.Get() //まずredisにデータがあるかどうかを確認します//conn,_ :=redis.Dial("tcp","localhost:6379") conn.Close() を延期する 値、_ := redis.Values(conn.Do("lrange", "mlist",0,-1)) len(値) > 0 の場合 { //データがある場合 fmt.Println("Redisからデータを取得") //_ の redis から直接取得します。キー:= 範囲値{ pid := 文字列(キー.([]バイト)) id ,_:= strconv.Atoi(pid) 結果、_ := redis.Bytes(conn.Do("GET",id)) var p 人 err := json.Unmarshal(結果、&p) err != nil の場合 { fmt.Println("json デシリアライズ エラー") }それ以外 { fmt.Printf("name = %s\n",p.Name) } } }それ以外 { fmt.Println("mysqlから取得") //データベースをクエリ db,_ := sql.Open("mysql","root:Szt930708@tcp(localhost:3306)/mydb") db.Close() を延期する var persons []人 行、_ := db.Query("人から id、名前、年齢、rmb を選択") 行のNext() { 変数ID int 変数名文字列 変数 年齢 int var rmb int 行.Scan(&id,&name,&age,&rmb) per := 人{id,名前,年齢,rmb} 人 = append(人、あたり) } //redis に書き込み: ハッシュモードで person を redis に書き込みます for _,p := range persons{ p_byte,_ := json.Marshal(p) _,err1 := conn.Do("SETNX",p.Id,p_byte) _,err2 := conn.Do("lpush","mlist",p.Id) // 有効期限を設定します conn.Do("EXPIRE",p.Id,60*5) err1 != nil || err2 != nil の場合 { fmt.Println("書き込みに失敗しました") }それ以外 { fmt.Println("書き込みに成功しました") } } conn.Do("EXPIRE","mlist",60*5) } } 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: vite+vue3+element-plus プロジェクトをビルドする手順
1. マインドマップ 2. コンテナの構築方法2.1 実験環境の準備(1)環境選択管理ツール: D...
この記事の主な内容は次のとおりです。 1. 閉じるボタン2.キャレット3. フローティングを素早く設...
CSS 3 アニメーションの例 - タブの背景切り替えの動的効果、具体的なコードは次のとおりです。 ...
これら 16 のサイトはそれぞれ注意深く読む価値があり、どのサイトでも推奨されている Web サイト...
目次1. 依存関係をインストールする2. vue.config.js ファイルで pwa を設定しま...
最近、小さなプログラムを開発しているときに、次の設計図のような円形のパーセンテージ進捗状況バーを実装...
1. フロントエンド主導の実装手順最初のステップは、ページのインポートボタンをクリックしてExcel...
1. Dockerネットワークカードを作成する [root@i ~]# brctl addbr d...
結果 (完全なコードは下部にあります): 実装は難しくありませんが、繰り返しコードが多くなります。実...
この記事では、JavaScriptシミュレーション計算機の具体的なコードを参考までに紹介します。具体...
1. cuda10.1をダウンロードします。 NVIDIA 公式ウェブサイト リンク: https:...
これは、CSS 3.0 で実装されたテキストのホバーとジャンプ効果です。効果は次のとおりです。 以下...
Dockerfile の紹介Docker は、Dockerfile の内容を読み取ってイメージを自動...
HTML メタビューポート属性の説明ビューポートとはモバイル ブラウザは、Web ページを仮想の「ウ...
Dockerにfastdfsをインストールするディレクトリをマウント-v /e/fdfs/トラッカー...