redis使用场景展示

1、存储用户访问记录:(由于产品数据可能时时存在修改,故不需要存储产品相关信息,如果需要存储的话,则可以使用redis的hash列或者用elasticsearch存储或数据库,在根据Id查询)

<?php
/**
* Created by PhpStorm.
* User: ytron123
* Date: 18/4/13
* Time: 上午11:01
*/
namespace app\index\service;
use app\pay\service\Check;
use app\pay\unit\re;
use think\Config;
use think\queue\job\Redis;

class OpusRedisService extends PublicService
{
public static $inc;
private function __construct(){}
private function __clone(){}
public static function inc()
{
if (!self::$inc instanceof self) {
self::$inc = new self;
}
return self::$inc;
}

/**
* 登录保存token
* @return array
*/
public function saveToken(){
$token = $_SESSION['think']['token'];
$token = 'qwetr23242343246efghfgayugdsrwe';
$userInfo = [
'user_id' => $_SESSION['think']['user']['user_id'],
'username' => $_SESSION['think']['user']['username'],
'time' => time(),
];
//唯一性,用有序集合
$redis = new \Redis();
$redis->connect(Config::get('REDIS_SITE'),Config::get('REDIS_PORT'));
$redis->auth(Config::get('REDIS_PWD'));
$key = 'tokens';
// $check = $redis->hExists($key,$token);每次用户在调用都进行时间的更新,所以不需要判断是否存在
$setToken = $redis->hSet($key,$token,json_encode($userInfo));//更新的时候值返回是0
$tokenTime = $redis->zAdd('recent:',time(),$token);//记录令牌最后一次出现的时间
dumps($redis->zRange('recent:',0,20,'withscores'));
dumps($redis->hGetAll($key));
return re::reArr(200);
}

/**
* 清除token
* @return array
*/
public function authToken(){
$limit = 5;//数量大于10开启清楚程序
//唯一性,用有序集合
$redis = new \Redis();
$redis->connect(Config::get('REDIS_SITE'),Config::get('REDIS_PORT'));
$redis->auth(Config::get('REDIS_PWD'));
$key = 'recent:';
$tokenKey = 'tokens';
$countSize = $redis->zCard($key);
if($countSize<=$limit){//还没达到不进行清理操作
return re::reArr(200);
}
$getDelLimit = $countSize-$limit;//获取需要清除的数量
$getRange = $redis->zRange($key,0,$getDelLimit-1);//最小的开始取

for($i=0;$i<$countSize;$i++){
$redis->zRem($key,$getRange[$i]);//移除过期的token
$redis->hDel($tokenKey,$getRange[$i]);//移除用户信息的token
//移除购物车,浏览记录等等
}
dumps($redis->zRange('recent:',0,20,'withscores'));
dumps($redis->hGetAll('tokens'));
return re::reArr(200);
}
/**
* redis获取访问记录
* @param $id
* @return array
*/
public function SetMyHistory($id){
$token = $_SESSION['think']['token'];
//唯一性,用有序集合
$redis = new \Redis();
$redis->connect(Config::get('REDIS_SITE'),Config::get('REDIS_PORT'));
$redis->auth(Config::get('REDIS_PWD'));
$key = 'opus_view:'.$token;
$countView = $redis->lLen($key);
if($countView>10){//大于10删除最旧的那一个数据
$redis->rPop($key);
}
$redis->lRem($key,$id,2);//去从
$redis->lPush($key,$id);
$getView = $redis->lRange($key,0,100);
return re::reArr(200,$getView);
}

/**
* 获取全部//用户点击提交的时候检测库存如果不够,则进行库存数量最小化
* @return array
*/
public function getMyCart(){
$token = $_SESSION['think']['token'];
//唯一性,用有序集合
$redis = new \Redis();
$redis->connect(Config::get('REDIS_SITE'),Config::get('REDIS_PORT'));
$redis->auth(Config::get('REDIS_PWD'));
$key = 'myCart:'.$token;
$totalCart = $redis->hLen($key);
return re::reArr(200,['count'=>$totalCart,'id_list'=>$redis->hGetAll($key)]);
}
/**
* 添加购物车//还需要检测商品是否够库存
* @param $goodsId
* @param int $num
* @return array
*/
public function setMyCart($goodsId,$num=1){
$token = $_SESSION['think']['token'];
//唯一性,用有序集合
$redis = new \Redis();
$redis->connect(Config::get('REDIS_SITE'),Config::get('REDIS_PORT'));
$redis->auth(Config::get('REDIS_PWD'));
$key = 'myCart:'.$token;
$totalCart = $redis->hLen($key);
if($totalCart>5){//购物车数量不能大于5

}
//如果存在,则更新数量
// $check = $redis->hExists($key,$goodsId);
$redisNum = $redis->hget($key,$goodsId);
if($redisNum){//存在的时候操作
$hetSet = $redis->hSet($key,$goodsId,$redisNum+$num);
// $hetSet = $redis->hIncrBy($key,$goodsId,$num);//递增数据
echo $hetSet;
}else{//不存在的时候操作
$redis->hSet($key,$goodsId,$num);
}
$getCart = $redis->hGetAll($key);
return re::reArr(200);
}

/**
* 删除操作
* @param $goodsId
*/
public function delMyCart($goodsId){
$token = $_SESSION['think']['token'];
//唯一性,用有序集合
$redis = new \Redis();
$redis->connect(Config::get('REDIS_SITE'),Config::get('REDIS_PORT'));
$redis->auth(Config::get('REDIS_PWD'));
$key = 'myCart:'.$token;
$redis->hDel($key,$goodsId);
}
public function sortList($sort){
//唯一性,用有序集合
$redis = new \Redis();
$redis->connect(Config::get('REDIS_SITE'),Config::get('REDIS_PORT'));
$redis->auth(Config::get('REDIS_PWD'));
//note 商品销售量 和 商品信息
for ($i=1; $i < 200; $i++) {
$redis->set("001|goods_sellhot:good_id_{$i}", mt_rand(0, 1000));
$arr = range('a', 'z');
shuffle($arr);
$redis->set("001|goods_info:good_id_{$i}", json_encode(['name'=>join("", array_slice( $arr, 0, 4 )), 'image'=>'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png']) );
}
//note 对应的商品id扔进对应的tag set里
for ($i=1; $i < 100; $i++) {
$redis->sadd("001|goods_tag:7dayback", mt_rand(1, 200));
$redis->sadd("001|goods_tag:pay_on_delivery", mt_rand(1, 200));
}

}
}

posted on 2018-04-13 14:29  我很迷茫  阅读(303)  评论(0)    收藏  举报