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. カレーの用途3. カリー化ユーティリティ関数をカプセル化する方法 1....
この記事では、例を使用して、MySQL で複数テーブルの関連統計を実装する方法について説明します。ご...
ScreenCloud は、必要だとは思わなかった素晴らしい小さなアプリです。デスクトップ Lin...
環境: VMware VCSA 6.7 (VMware-VCSA-all-6.7.0-8169922...
序文私が必要としているのは、構文の強調表示、関数プロンプト、自動行折り返し、およびコードの折りたたみ...
1. mysqldump コマンドを使用してデータベースをエクスポートします (このコマンドのパスで...
目次序文コアコードコードのファイル表示部分序文この記事では主に、Vue プロジェクトでの添付ファイル...
WindowsにMySQLの圧縮バージョンをインストールする方法の詳細については、以下を参照してくだ...
序文開発中は、インターフェース要求の繰り返しによってさまざまな問題が発生することがよくあります。ネッ...
最近Nginxを構築しているのですが、ドメイン名でアクセスできません。 nginx 構成ファイル n...
目次算術演算子異常状況1: 特殊値リテラルを含む操作異常な状況 2: 他の種類のデータが数学演算に関...
1. ローカルyumソースを設定する1. ISOイメージをマウントする マウント -o loop /...
0. 以下のテストに関連する表を準備する関連するテーブル作成ステートメントについては、https:/...
目的: 1. Alibaba Cloud Serverを介してサーバーの外部ネットワークをマッピング...
まず依存関係をダウンロードします yarn sass-loader ノード sass を追加します次...