ホームページ > バックエンド開発 > PHPチュートリアル > データクエリはmemcacheキャッシュとSQLで作成されたキー値を使用します。ページングデータは変更されません。

データクエリはmemcacheキャッシュとSQLで作成されたキー値を使用します。ページングデータは変更されません。

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-23 13:38:16
オリジナル
1056 人が閲覧しました

データクエリはmemcacheキャッシュを使用し、SQLによって作成されたキー値を使用し、データがない場合はSQLが変更され、再クエリされ、キャッシュされます。ローカルでは問題ありませんでしたが、今後、どのようなパラメータを渡しても、それに応じてSQLが変更されますが、変更されたキー値に基づいて取得されるデータリストは変更されません。考えられる理由を教えてください


ディスカッションに返信(解決策)

どのように????
文字列を検索する場合は検索できませんので、次のコードを確認してください。
自分で追加したかどうかを確認してください。

ページングのないサーバー データは少数しかありませんか?その結果、各ページのデータは同じになります。 。

キーコードを投稿してください。

え?
文字列を検索する場合は検索できませんので、次のコードを確認してください。
これらを自分で追加するかどうかを確認してください。

最初にサーバーにアップロードしたときは、クエリ SQL 全体をキー値として使用し、ページの重複はありませんでした。しばらく実行した後、重複を発見しました。 SQL 全体がキー値として使用されたことが原因である可能性があります。キー値が長すぎるため、今後 md5($sql) がキー値として渡されると、データの読み取りに影響します。キー値が長すぎますか?

キーコードを投稿してください。


$sql = "select id,avg_point,name,xpoint,ypoint,agent_area_id,area_id,supplier_id,index_img,dp_count,avg_point,deal_cate_id,ratio,area_id,note from aa  where 1 = 1 and is_effect=1 and city_id in (18,1) order by id DESC limit 0,15"; $key =  $GLOBALS['append_config']['IOS_CACHE_PRE'].$sql;    $info = mcache_get($key); if(!$info){    $info = $GLOBALS['db']->getAll($sql);    mcache_set($key,$info); }
ログイン後にコピー
各クエリの条件に応じて生成される SQL は異なりますが、SQL が異なる限り、毎回キー値としての SQL が異なっていても、データは再取得されます。再取得されていません

$sql md5 を置くだけですか?
memcache キーにはある程度の制限があります。

$sql = "select id,avg_point,name,xpoint,ypoint,agent_area_id,area_id,supplier_id,index_img,dp_count,avg_point,deal_cate_id,ratio,area_id,note (1 = 1、is_effect=1、city_id in aa) 18,1) ID による順序 DESC 制限 0,15";
$key = md5($GLOBALS['append_config']['IOS_CACHE_PRE'].$sql);
$info = mcache_get($key);
if( !$info){
$info = $GLOBALS['db']->getAll($sql);
mcache_set($key,$info)
}

含まれていないサーバー データはいくつかありますか?ページング、ああ?その結果、各ページのデータは同じになります。 。

大量のデータをページングする必要があります

キー
----

memcached によって保存されたデータは、キーを使用して識別されます
キー
は、クライアント
のデータを一意に識別する必要があるテキスト文字列です。現在、キーの
の長さ制限は 250 文字に設定されています (もちろん、通常、クライアントはそのような長いキーを使用する必要はありません)。キーには
制御文字や空白を含めることはできません。
Baidu 翻訳:
memcached に保存されたデータはキー値によって識別されます。キー
は、保存および取得の対象となる顧客データ
を一意に識別する必要があるテキスト文字列です。現在、
キーの長さの制限は 250 文字です (もちろん、通常、
クライアントは長いキーを使用する必要はありません)。キーには
制御文字やスペースを含めることはできません。

明らかにルールに違反しています

ls は、SQL ステートメントの長さは約 220 文字ですが、memcached の最大文字制限を超えていないことを明確に示しました。ただし、SQL にはスペースが含まれているため、SQL の最初のスペースより前の部分が実際にはキーとして使用されます。この場合、明らかにすべてのページ分割されたデータは同じです。

MD5 から始めましょう。

皆さん、熱心なご回答ありがとうございました

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート