优化随机查询云仓商品
This commit is contained in:
parent
d00c62f859
commit
6e9fb8d3f7
@ -188,8 +188,7 @@ class SpuRepository extends BaseRepository
|
|||||||
$RedisCacheService->SADD($dataKey, $productId);
|
$RedisCacheService->SADD($dataKey, $productId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$where['product_id'] = $RedisCacheService->sRandMember($dataKey, 10);
|
$where['product_id'] = $this->getSpuFromCache($where['mer_id'], $page);
|
||||||
// $where['product_id'] = $this->getSpuFromCache($where['mer_id'], $page);
|
|
||||||
unset($where['mer_id'], $where['page']);
|
unset($where['mer_id'], $where['page']);
|
||||||
$page = 1;
|
$page = 1;
|
||||||
}
|
}
|
||||||
@ -221,34 +220,37 @@ class SpuRepository extends BaseRepository
|
|||||||
* @param $merId
|
* @param $merId
|
||||||
* @param $page
|
* @param $page
|
||||||
* @return array
|
* @return array
|
||||||
|
* @throws \RedisException
|
||||||
*/
|
*/
|
||||||
public function getSpuFromCache($merId, $page): array
|
public function getSpuFromCache($merId, $page): array
|
||||||
{
|
{
|
||||||
$dataKey = 'CloudMerchantSpu_' . $merId;
|
$dataKey = 'CloudMerchantSpu_' . $merId;
|
||||||
$takenKey = 'CloudMerchantSpuTakenProductIds_' . $merId . '_page_'. $page;
|
$takenKey = 'CloudMerchantSpu_' . $merId . '_page_'. $page;
|
||||||
$allTakenKey = 'CloudMerchantSpuTakenProductIds_' . $merId;
|
$remainKey = 'CloudMerchantSpuRemain_' . $merId;
|
||||||
/** @var RedisCacheService $RedisCacheService */
|
/** @var RedisCacheService $RedisCacheService */
|
||||||
$RedisCacheService = app()->make(RedisCacheService::class);
|
$RedisCacheService = app()->make(RedisCacheService::class);
|
||||||
if ($RedisCacheService->exists($takenKey)) {
|
if ($RedisCacheService->exists($takenKey)) {
|
||||||
return $RedisCacheService->sMembers($takenKey);
|
return $RedisCacheService->sMembers($takenKey);
|
||||||
}
|
}
|
||||||
if ($RedisCacheService->sCard($allTakenKey) == $RedisCacheService->sCard($dataKey)) {
|
$remainCount = $RedisCacheService->sCard($remainKey);
|
||||||
$keys = $RedisCacheService->sRandMember($dataKey, 10);
|
if ($remainCount == 0 && $page > 1) {
|
||||||
} else {
|
|
||||||
$keys = $RedisCacheService->sDiff($dataKey, $allTakenKey);
|
|
||||||
}
|
|
||||||
$number = min(count($keys), 10);
|
|
||||||
if ($number <= 0) {
|
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
$indexes = array_rand($keys, $number);
|
|
||||||
$productIds = [];
|
$productIds = [];
|
||||||
foreach ($indexes as $index) {
|
if ($remainCount == 0) {
|
||||||
$productIds[] = $keys[$index];
|
$productIds = $RedisCacheService->sRandMember($dataKey, 10);
|
||||||
|
} else {
|
||||||
|
for ($i = 0; $i < $remainCount; $i++) {
|
||||||
|
$productIds[] = $RedisCacheService->sPop($remainKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($page == 1) {
|
||||||
|
$allProductIds = $RedisCacheService->sMembers($dataKey);
|
||||||
|
$remainProductIds = array_diff($allProductIds, $productIds);
|
||||||
|
$RedisCacheService->sAdd($remainKey, ...$remainProductIds);
|
||||||
}
|
}
|
||||||
$RedisCacheService->sAdd($takenKey, ...$productIds);
|
$RedisCacheService->sAdd($takenKey, ...$productIds);
|
||||||
$RedisCacheService->sAdd($allTakenKey, ...$productIds);
|
$RedisCacheService->expire($takenKey, 180);
|
||||||
$RedisCacheService->expire($takenKey, 60);
|
|
||||||
return $productIds;
|
return $productIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user