redis 初始化 php 类,php 操作redis

本人介绍PHP操作redis的一些常用方法,封装类如下

/**

* @author jinanav 2020年1月13日16:40:38

* @desc 自定义Redis服务类

*/

class RedisService{

//redis操作对象

private static $redis = null;

//全局用户token

private static $token = null;

//全局user信息

private static $user = null;

//前缀

private static $fix = "token_";

/**

* 初始化

*/

public function __construct(){

if(empty(self::$redis)){

self::$redis = new \Redis();

self::$redis->connect("127.0.0.1",6379,5);

self::$redis->auth('abck123456');

self::$redis->select(3);

}

//这里用到tp5.1的门面

//!empty(Request::header('token')) && self::$token = Request::header('token');

}

/**

* 初始化

*/

public static function init(){

new static();

}

/**

* 根据token获取当前登录用户

* @author jinanav 2020年1月13日16:40:57

* @return array | string | null

*/

public static function getUser($key = null){

if(!isset(self::$user[$key]) || empty(self::$user[$key])){

if (empty(self::$token)) return null;

self::$user = self::$redis->get(self::$token);

self::$user = empty(self::$user) ? [] : json_decode(self::$user,true);

}

return empty($key) ? self::$user : self::$user[$key] ?? null;

}

/**

* 设置用户登录信息

* @author jinanav 2020年1月13日17:47:15

* @param array $user 用户信息

* @param int $timeout 失效时间

* @return array|bool

*/

public static function setUser($userInfo,$timeout = 86400 * 7){

empty(self::$token) && self::$token = self::createToken($userInfo['id'] ?? 0);

self::$user = array_merge(self::getUser(),$userInfo);

return self::$redis->set(self::$token,json_encode(self::$user),$timeout);

}

/**

* 注销用户

* @author jinanav 2020年1月17日15:53:11

* @return bool

*/

public static function delUser($token = null){

return self::$redis->del(empty($token) ? self::$token : $token);

}

/**

* 根据用户uid生成token

* @author jinanav 2020年1月13日17:47:15

* @param int $string 用户识别字符串

* @retrun string;

*/

public static function createToken($string){

return self::$fix.strtoupper(md5($string.time().rand(100,999)));

}

/**

* 统计key长度,默认获取当前在线用户

* @author jinanav 2020年1月13日19:45:03

* @return int

*/

public static function onLineNumber($key = null){

empty($key) && $key = self::$fix."*";

return count(self::$redis->keys($key));

}

/**

* 校验是否需要登录

* @author jinanav 2020年1月19日14:56:29

* @param bool $needLogin 是否需要登录

* @return string Json

*/

public static function loginStatus($needLogin = false){

return self::existKey() ? true : $needLogin ? ajaxReturn(302,'请先到登录...') : false;

}

/**

* 查询当前token是否存在

* @author jinanav 2020年1月19日14:59:26

* @return bool

*/

public static function existKey($key = null){

return self::$redis->exists(!empty($key) ? $key : self::$token);

}

/**

* 日志数据写入队列

* @author jinanav 2020年1月17日15:05:06

* @param array $data 写入队列的消息

* @param string $queue 队列key名称 与日志表名相关联

* @return boolean

*/

public static function enqueue($data,$queue = 'api_queue'){

//MQ过长不予写入,建议自定义长度

if(self::queueLen($queue) < 8000 && !empty($data)){

return self::$redis->lPush($queue,json_encode($data));

}

return false;

}

/**

* 读取队列数据

* @author jinanav 2020年1月17日15:11:44

* @param string $queue 队列key名称

* @return array

*/

public static function dequeue($queue = 'api_queue'){

$info = self::$redis->rPop($queue);

return !empty($info) ? json_decode($info,true) : [];

}

/**

* 返回队列长度

* @author jinanav 2020年1月17日17:23:32

* @param string $queue 队列key名称

* @return int

*/

public static function queueLen($queue = 'api_queue'){

return self::$redis->lLen($queue);

}

/**

* 查看队列列表

* @param string $queue

* @author shaochao 2020/4/3 21:35

* @return

*/

public static function lRange($queue = 'api_queue',$start=0,$end=10){

return self::$redis->lRange($queue,$start,$end);

}

/**

* 获取当前token

* @author jinanav 2020年3月6日15:35:44

* @return string|null

*/

public static function getToken(){

return self::existKey() ? self::$token : null;

}

/**

* 设置当前token

* @author jinanav 2020年3月6日15:35:44

* @return string

*/

public static function setToken($token){

self::$token = $token;

}

/**

* 返回当前redis操作对象

* @author jinanav 2020年4月21日15:32:57

* @return \Redis

*/

public static function op(){

return self::$redis;

}

/**

* 删除键

* @author jinanav 2020年6月4日00:13:12

* @return bool

*/

public static function remove($key){

return self::$redis->del($key);

}

/**

* 查看指定键的生存时间

* @author jinanav 2020年6月4日00:13:12

* @return bool

*/

public static function ttl($key = null){

return self::$redis->ttl(empty($key) ? self::$token : $key);

}

/**

* 设置指定键的过期时间

* @author jinanav 2020年6月29日00:29:25

* @return bool

*/

public static function expire($timeout = 600,$key = null){

return self::$redis->expire(empty($key) ? self::$token : $key,$timeout);

}

/**

* 写新值,并返回旧值

* @author jinanav 2020年6月29日00:29:25

* @return bool

*/

public static function getSet($key,$value){

return self::$redis->GetSet(empty($key) ? self::$token : $key,$value);

}

/**

* 将value绑定到key,并重置过期时间

* @author jinanav 2020年6月29日00:29:25

* @return bool

*/

public static function setex($key,$value,$timeOut){

return self::$redis->setex(empty($key) ? self::$token : $key,$timeOut,$value);

}

}

在任意地方引入,执行

RedisService::init();

RedisService::setUser(['id'=>20,'age'=>18]);

echo "用户数据
";

var_dump(RedisService::getUser());

echo '
';

echo "token:
";

var_dump(RedisService::getToken());

echo '
';

echo "在线用户数:
";

var_dump(RedisService::onLineNumber());

查看执行结果

5c5679048035

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值