1. 程式人生 > >利用redis快取mysql查詢結果,關於快取命名

利用redis快取mysql查詢結果,關於快取命名

問題:

在對 mysql 查詢結果快取時,我一直都有這樣的疑惑。那就是當更新一條記錄或者刪除一條記錄時候,那麼對應的主鍵所有的查詢結果必須同時更新,那麼在就是說在

update table set field = value where id = XXX;

之後

select * from table;
或者
select field1, field2... from table where id = XXX

這些查詢結果都會發現變化,那麼如何保持結果的正確,避免髒資料的讀取呢??
給快取的命名就顯得非常重要了,之前我的想法是以這樣的命名來建立快取:

db_table_primaryId_sql

這樣的話就有個問題,當更新一條記錄的時候可以根據 db_table_primaryId_* 來刪除所有的快取,但是如果 update 的是多行,那麼久等於說要將所有的 db_table_* 快取都失效。這樣效率不是很高。

在工作中實際的做法是這樣的:
查詢無非是 getAll,getRow 這兩種,獲取全部,獲取某一行,那麼在快取 key 命名中加入這兩個就可以了

//針對 getAll:
db_name:table_name:all:others:sql_hash
//針對 getRow:
db_name:table_name:row:primary_key_id=?

在 update ,delete, insert 之後都會全部清除 db_name:table_name:all:others:* 的快取,並且根據修改的 id 去清除 db_name:table_name:row:primary_key_id=? 裡面的行快取
在 insert 之後就單單增加 db_name:table_name:row:primary_key_id=? 的快取

最後的最後還是要囉嗦幾句,在現在工作中,如果很大的流量來頻繁連結 redis 和 mysql,顯然是頂不順的,工作中發現公司是用了一個 swoole 的服務來進行維護 redis 和 MySQL 的長連線,用 tcp協議包 自定義協議來 socket 通訊傳入 sql ,swoole 的服務主要是執行邏輯,更新快取,插入資料等等。我覺得應該是和下面的兩文章介紹的差不多。可惜我不會 swoole ,看的有點吃力。

相關推薦

利用redis快取mysql查詢結果關於快取命名

問題: 在對 mysql 查詢結果快取時,我一直都有這樣的疑惑。那就是當更新一條記錄或者刪除一條記錄時候,那麼對應的主鍵所有的查詢結果必須同時更新,那麼在就是說在 update table set field = value where id = XXX

使用Spring Cache + Redis + Jackson Serializer快取資料庫查詢結果中序列化問題的解決

應用場景 我們希望通過快取來減少對關係型資料庫的查詢次數,減輕資料庫壓力。在執行DAO類的select***(), query***()方法時,先從Redis中查詢有沒有快取資料,如果有則直接從Redis拿到結果,如果沒有再向資料庫發起查詢請求取資料。

利用pandas將mysql查詢出得結果寫入到excel文件

pandas excel#!/usr/bin/env python3import pandas as pdimport pymysql#返回SQL結果的函數def getrel(sql): conn = pymysql.connect(host='localhost',user=

mysql查詢查詢結果按where in陣列排序

使用情況:當我們在進行where id in () 查詢的時候,如果where in的id查詢陣列為[2,7,1,4,3],正常情況查詢出來的結果順序為[1,2,3,4,7],這可能不是我們想要的結果,我們期望查出來的結果順序與where in的順序一致,這裡介紹兩個方式:

mysql針對查詢結果批量插入不同的uuid

SELECT REPLACE (UUID(), '-', '') id,id extend_value FROM `portal_product` REPLACE (UUID(), '-', '')這種,批量生成的uuid都是一樣的, 直接用uuid()即可生成不

redis學習系列--Redis 高併發下的快取穿透問題解決方案

下面這段程式碼 如果1W個人同時訪問的話,  從redis 拿 allUser 時, userList為空時,那麼1W個人都要進入if判斷語句,查詢資料庫,資料庫壓力承受不住 package com.

mysql查詢結果單位換算後小數位數的保留方式

查詢 board copy oar 四舍五入 sdn highlight lec sel 1、調用mysql自帶的格式化小數函數format(x,d) 例如: [html] view plain copy select format(

Mysql查詢結果只有一條的情況下把值賦值給變量

lec div class date() where sql logs pan rdate 1 set @n=(SELECT count(day) from log where day=CURDATE()); 2 SELECT @n 把結果中count(day)的值賦值

利用反射技術將查詢結果封裝為對象

long trace leg war sel 反射 test get col public class ORMTest extends HttpServlet { private static final long se

一句話實現Mysql查詢結果帶行號

mys span sele font spa lec sql 行號 ont SELECT @rowno:=@rowno + 1 AS rowno,a.* FROM tableName a,(SELECT @rowno:=0) b一句話實現Mysql查詢結果帶行號

自動數據庫抽取想要的查詢結果自動生成txt(utf-8)文件然後自動ftp上傳到外網服務器

txt(utf-8)需求:無人值守的把數據庫中的數據,生成txt文本,自動上傳到ftp服務器,與外部客戶進行數據對接;===============================================步驟:1 寫存儲過程 2 數據庫中建立計劃任務 3 寫轉換txt編碼格式的插件

MySQL查詢查詢時間更新為當前時間now()的sql語句寫法

ann 語句 author mysql查詢 使用 app 技術分享 select ima sql語句寫法: select a.id,a.title,a.doc_content,a.write_time,a.author,a.articletype,a.channelid,

mysql 查詢結果匯入檔案或excel 檔案匯入資料庫

查詢結果匯入檔案或excel 方法1 進入mysql伺服器中 select * from www limit 1000 into outfile '/xusy/www.xls'; 注意檔名外有單引號 如果方法1不行,當連線外部伺服器 方法2 直接進行操作 mysql

mysql 查詢今天昨天上個月sql語句

今天 select * from 表名 where to_days(時間欄位名) = to_days(now()); 昨天Select * FROM 表名 Where TO_DAYS( NOW( ) ) - TO_DAYS( 時間欄位名) <= 1 7天Select * FROM

WPF DataGrid顯示MySQL查詢資訊且可刪除、修改、插入

c# MySQL 1、入行好幾年了,工作中使用資料庫機率很小(傳統行業)。藉著十一假期回家機會,學習下資料庫。 2、初次瞭解資料庫相關知識,如果本文有誤,還望告知。 3、本文主要目的,記錄下wpf介面顯示資料庫資訊,且可進行刪除、修改、插入

mysql 查詢當天一週一月的查詢語句

select * from `t_exer_record_88` where DATE_SUB(CURDATE(), INTERVAL 7 DAY)<= date(update_time); select * from `t_exer_record_88` where DATE_SUB

MySql查詢結果過濾同時滿足多個條件的資料

建立學生表,內有欄位 姓名,年齡,性別,年級  ,(這裡我只建立到三年級) 備註 :性別 男/女,,年級 :學前班/一到六年級,,姓名年齡不限 要求: 查詢一年級的男生和二到五年級的所有學生 對於以上的查詢語句該編寫SQL select * from student where

mybatis中resultMap丟失查詢結果association“錯誤”去除重複資料的問題

  <resultMap id="commissionRec" type="CommissionRec" >         <result property="sourceName" column="cmr_sourceName"/>        

mysql查詢結果輸出到檔案 mysql查詢結果輸出到檔案

mysql查詢結果輸出到檔案   mysql查詢結果匯出/輸出/寫入到檔案 方法一:直接執行命令:mysql> select count(1) from table  into outfile '/tmp/test.xls'; Q

mysql 查詢結果被 截斷 問題 group_concat

MySQL提供的group_concat函式可以拼接某個欄位值成字串,如 select group_concat(user_name) from sys_user,預設的分隔符是 逗號,即"," ,如果需要自定義分隔符可以使用 SEPARATOR 如:select grou