Symfony中如何向Redis存储非字符串类型的数据?
Symfony中Redis存储多种数据类型的解决方案
两种处理方式
1. 直接操作Redis原生数据类型
Symfony的RedisAdapter是基于PSR-6缓存规范的抽象层,默认会将值序列化后以字符串存储。如果需要使用Redis原生的哈希、列表、集合等数据类型,直接使用createConnection返回的底层Redis客户端实例调用原生命令即可:
// 创建Redis客户端连接 $client = RedisAdapter::createConnection('redis://127.0.0.1:6379'); // 存储并操作哈希类型 $client->hSet('user:1', 'name', 'John'); $client->hSet('user:1', 'email', 'john@example.com'); $user = $client->hGetAll('user:1'); // 返回关联数组 // 存储并操作列表类型 $client->lPush('notifications', 'New message'); $client->lPush('notifications', 'System alert'); $notifications = $client->lRange('notifications', 0, -1); // 返回列表数组 // 存储并操作集合类型 $client->sAdd('tags', 'symfony'); $client->sAdd('tags', 'php'); $tags = $client->sMembers('tags'); // 返回集合数组
2. 利用缓存适配器存储PHP复杂类型
如果只是需要存储PHP的数组、对象等复杂类型,不需要Redis原生数据类型的特性,继续使用RedisAdapter即可。它会自动对数据进行序列化/反序列化,取出时还原原类型:
$client = RedisAdapter::createConnection('redis://127.0.0.1:6379'); $cache = new RedisAdapter($client); // 存储数组 $item = $cache->getItem('test_array'); $item->set(['id' => 1, 'name' => 'Test']); $item->expiresAfter(3600); $cache->save($item); // 取出并还原数组类型 $fetchedItem = $cache->getItem('test_array'); $data = $fetchedItem->get(); // $data 是原数组类型
注意:这种方式在Redis中存储的是序列化后的字符串,无法通过Redis原生命令直接操作内部字段。
内容的提问来源于stack exchange,提问作者sina
相关产品推荐
相关产品推荐

