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 プロジェクトをビルドする手順
脆弱性の紹介SigRed の脆弱性はワーム化可能であるため非常に危険です。つまり、ユーザーの介入なし...
反復/egrep構文: grep [-cinvABC] 'word' ファイル名-c...
目次開発の際には、機能を段階的に分析して実装することで、明確な考え方を保つことができます。 1. フ...
Iframe 使用状況の詳細な分析<iframe frameborder=0 width=17...
<br />原文: http://blog.rexsong.com/?p=1166ウェブ...
この記事の例では、タブ効果を実現するためのjsプラグインの具体的なコードを参考までに共有しています。...
1. 設置前によく掃除する rpm -pa | grep mysql または rpm -qa | g...
1 はじめにバイナリ ログは、データを持つ、またはデータを変更する可能性がある SQL ステートメン...
MySQLとMariaDBの関係MariaDB データベース管理システムは MySQL のブランチで...
日常業務では、スペースのないファイルに遭遇することがよくあります。これにより、削除操作がはるかに簡単...
% ワイルドカードを使用すると、インデックス失敗の問題が発生することがよくあります。ここでは、lik...
この記事の例では、グラフィック検証コードを実装するためのVueプロジェクトの具体的なコードを参考まで...
ロゴの最適化: 1.ロゴ画像はできるだけ小さくしてください。 2. 一般的には背景として配置されます...
PCIE には 4 つの異なる仕様があります。下の図でそのうちの 2 つを見てみましょう。マザーボー...
目次サイクルのために入室のためのその間しながら行うループから抜け出す要約するサイクルのためにループは...