我在数据库中有大量数据,有时服务器在执行结果超过服务器响应时间时没有响应.那么,有没有办法减少使用redis的mysql服务器的负载以及如何以正确的方式实现它.
Har*_*dja 19
Redis支持一系列数据类型,您可能想知道NOSQL键值存储与数据类型有什么关系?嗯,这些数据类型可以帮助开发人员以有意义的方式存储数据,并可以更快地进行数据检索.
1)从github下载或获取predis库的克隆
2)我们将要求Redis Autoloader并注册它.然后我们将客户端包装在try catch块中.在本地服务器上连接到Redis的连接设置与连接到远程服务器不同.
require "predis/autoload.php";
PredisAutoloader::register();
try {
$redis = new PredisClient();
// This connection is for a remote server
/*
$redis = new PredisClient(array(
"scheme" => "tcp",
"host" => "153.202.124.2",
"port" => 6379
));
*/
}
catch (Exception $e) {
die($e->getMessage());
}
Run Code Online (Sandbox Code Playgroud)
现在我们已成功连接到Redis服务器,让我们开始使用Redis.
以下是Redis支持的一些数据类型:
在Redis中,最重要的命令是SET,GET和EXISTS.这些命令用于存储,检查和检索Redis服务器中的数据.与命令一样,Predis类可用于通过与命令同名的方法执行Redis操作.例如:
// sets message to contian "Hello world"
$redis->set('message', 'Hello world');
// gets the value of message
$value = $redis->get('message');
// Hello world
print($value);
echo ($redis->exists('message')) ? "Oui" : "please populate the message key";
Run Code Online (Sandbox Code Playgroud)
INCR和DECR是用于减少或增加值的命令.
$redis->set("counter", 0);
$redis->incr("counter"); // 1
$redis->incr("counter"); // 2
$redis->decr("counter"); // 1
$redis->set("counter", 0);
$redis->incrby("counter", 15); // 15
$redis->incrby("counter", 5); // 20
$redis->decrby("counter", 10); // 10
Run Code Online (Sandbox Code Playgroud)
有一些用于处理列表的基本Redis命令,它们是:
示例如下所述
$redis->rpush("languages", "french"); // [french]
$redis->rpush("languages", "arabic"); // [french, arabic]
$redis->lpush("languages", "english"); // [english, french, arabic]
$redis->lpush("languages", "swedish"); // [swedish, english, french, arabic]
$redis->lpop("languages"); // [english, french, arabic]
$redis->rpop("languages"); // [english, french]
$redis->llen("languages"); // 2
$redis->lrange("languages", 0, -1); // returns all elements
$redis->lrange("languages", 0, 1); // [english, french]
Run Code Online (Sandbox Code Playgroud)
你需要将Redis数据库作为主数据库,Mysql数据库作为slave,这意味着你必须首先从Redis获取数据,如果没有找到/重新获取数据,那么你必须从Mysql获取数据,如果找到数据然后更新Redis数据,那么下次你可以从redis中检索数据.基本快照如下所述.
//Connect with Redis database
$data=get_data_redis($query_param);
if(empty($data))
{
//connect with mysql
$data=get_data_mysql($query_param);
if(!empty($data))
{
// update data into redis for that data
update_data_redis($data,$query_param);
}
}
Run Code Online (Sandbox Code Playgroud)
如果将数据管理到数据库中,则必须先将数据更新到mysql数据库,然后将其更新到Redis数据库中.
//insert data in mysql
$inserted= insert_data_mysql($data);
if($inserted)
{
insert_data_redis($data);
}
//update data in mysql
$updated= update_data_mysql($data,$query);
if($updated)
{
insert_data_redis($data,$query);
}
//delete data in mysql
$deleted= delete_data_mysql($query);
if($deleted)
{
delete_data_redis($query);
}
Run Code Online (Sandbox Code Playgroud)
Nis*_*ant 16
Redis可以用作MYSQL查询的缓存层.Redis是一个内存数据库,这意味着它将数据保存在内存中,与查询MYSQL中的数据相比,它可以更快地访问.
一个示例用例是:
假设您正在创建一个游戏列表网站,并且您有多个游戏类别,如汽车游戏,自行车游戏,儿童游戏等,并找到每个类别的游戏映射,您必须查询SQL数据库以获取游戏列表为您的游戏列表页面.在这种情况下,您可以将Redis用作缓存层,并在memcahce/Radis中缓存SQL响应X小时.
确切的步骤:
这将把大量的查询从MYSQL卸载到内存中的redis db.
if(data in redis){
step 1: return data;
}else{
step 1: query MYSQL
step 2: Save in redis
step 3: return data
}
Run Code Online (Sandbox Code Playgroud)
在选择要在redis中保存的查询之前要考虑的一些要点是:
希望它会有所帮助.