Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在redis中保存mysql表格数据_Php_Redis - Fatal编程技术网

Php 在redis中保存mysql表格数据

Php 在redis中保存mysql表格数据,php,redis,Php,Redis,我是redis的新手,所以我的问题可能是错的 我想在redis中保存用户数据 例如,让数据- first_name last_name email abc xyz abc@example.com def hig def@example.com 我的代码是

我是redis的新手,所以我的问题可能是错的

我想在redis中保存用户数据

例如,让数据-

    first_name            last_name                  email
    abc                   xyz                        abc@example.com
    def                   hig                        def@example.com
我的代码是-

让我们在post数组中获取数据

        require "predis/autoload.php";
        Predis\Autoloader::register();

        $redis = new Predis\Client(array(
         "scheme" => "tcp",
         "host" => "127.0.0.1",
         "port" => 6379));

        $redis->incr("id");
        $user_id = $redis->get("id");


        $redis->hset("users", 'id', $user_id);
        foreach($_POST as $key  =>  $post_values){
            $redis->hset("users", $key, $post_values);

        }
当我使用命令看到用户数据时

$users = $redis->hgetall("users");
第二个用户与第一个用户重叠。 我认为id没有正确映射用户数据


请建议

我建议使用hmset而不仅仅是hset,因此使用hmset,我认为最简单的方法是使用数组的名称作为用户ID:

HMSET user1 email "test@email.com" username "MyUser"
那你可以用

HMGET user1 email
获取用户1的电子邮件

对于PHP,我将在下面介绍如何使用它在PHP中设置这些相同的命令

$redis = (new \Redis\RedisProtocol())->connect('127.0.0.1', '6379');
$redis->hmset("user1", ["email", "test@email.com", "username", "MyUser"]);
然后是:

($redis->hmget("user1", ['email']))[0]

我建议使用hmset而不仅仅是hset,因此使用hmset,我认为最简单的方法是使用数组的名称作为用户ID:

HMSET user1 email "test@email.com" username "MyUser"
那你可以用

HMGET user1 email
获取用户1的电子邮件

对于PHP,我将在下面介绍如何使用它在PHP中设置这些相同的命令

$redis = (new \Redis\RedisProtocol())->connect('127.0.0.1', '6379');
$redis->hmset("user1", ["email", "test@email.com", "username", "MyUser"]);
然后是:

($redis->hmget("user1", ['email']))[0]

这里的问题很简单,您使用“用户”存储所有用户的数据,而每个用户本身就是一个散列。因此,在ID后面加上字符串“users”,就可以开始了

$redis->hset("users", 'id', $user_id);
Change it like $redis->hset("users:"+$user_id, 'id', $user_id);
foreach($_POST as $key  =>  $post_values){
        $redis->hset("users:"+$user_id, $key, $post_values);

    }

希望这对您有所帮助这里的问题很简单,您使用“用户”存储所有用户的数据,而每个用户本身就是一个散列。因此,在ID后面加上字符串“users”,就可以开始了

$redis->hset("users", 'id', $user_id);
Change it like $redis->hset("users:"+$user_id, 'id', $user_id);
foreach($_POST as $key  =>  $post_values){
        $redis->hset("users:"+$user_id, $key, $post_values);

    }

希望这对您有所帮助

使用hmset和hmget,而不仅仅是单一的hset,因为hmset可以使用链接到一个全局键的多个字段在您的表中使用唯一键创建哈希键(例如,在您的情况下使用电子邮件)。将数据存储在与之对应的redis中。谢谢,我正在尝试。@JammyDodger231我正在尝试hmset及其保存数组中数据的好方法,但是有任何方法可以直接更新任何字段。例如,我想更新电子邮件,那么我该怎么做?@Rich5757我现在已经写下了答案,我认为这将是最好的解决方法,使用hmset和hmget而不仅仅是单个hset不是更好,因为hmset可以使用多个字段链接到一个全局键使用表中的唯一键生成散列键(例如,您案例中的电子邮件)。将数据存储在与之对应的redis中。谢谢,我正在尝试。@JammyDodger231我正在尝试hmset及其保存数组中数据的好方法,但有任何方法可以直接更新任何字段。例如,我想更新电子邮件,那么我该怎么办?@Rich5757我现在已经写下了答案,我认为这将是最好的goi方法谢谢,我正在测试。