当前位置:首页 » 编程语言 » php访问redis

php访问redis

发布时间: 2022-05-26 10:31:22

Ⅰ 如何利用php访问带有密码的Redis

1. 设置Redis密码,以提供远程登陆
打开redis.conf配置文件,找到requirepass,然后修改如下:
requirepass yourpassword

yourpassword就是redis验证密码,设置密码以后发现可以登陆,但是无法执行命令了。
命令如下:
redis-cli -h 127.0.0.1 -p 6379//启动redis客户端,并连接服务器
keys * //输出服务器中的所有key

报错如下
(error) ERR operation not permitted
这时候你可以用授权命令进行授权,就不报错了
命令如下:
auth youpassword

2. PHP访问Redis

$redis = new Redis();
$conn = $redis->connect('localhost', 6379);
$auth = $redis->auth('20160601'); //设置密码
var_mp($auth);
$redis->set('access_token', "123213213213213213");
$redis->set('expired_time', 1464344863);

var_mp($redis->get("access_token"));
var_mp($redis->get("expired_time"));

Ⅱ php 使用redis锁限制并发访问类示例

本文介绍了php
使用redis锁限制并发访问类,并详细的介绍了并发访问限制方法。
1.并发访问限制问题
对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。
例如换领优惠券,如果用户同一时间并发提交换领码,在没有加锁限制的情况下,用户则可以使用同一个换领码同时兑换到多张优惠券。
伪代码如下:
if
A(可以换领)

B(执行换领)

C(更新为已换领)
D(结束)
如果用户并发提交换领码,都能通过可以换领(A)的判断,因为必须有一个执行换领(B)后,才会更新为已换领(C)。因此如果用户在有一个更新为已换领之前,有多少次请求,这些请求都可以执行成功。
2.并发访问限制方法
使用文件锁可以实现并发访问限制,但对于分布式架构的环境,使用文件锁不能保证多台服务器的并发访问限制。
Redis是一个开源的使用ANSI
C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
本文将使用其setnx方法实现分布式锁功能。setnx即Set
it
N**ot
eX**ists。
当键值不存在时,插入成功(获取锁成功),如果键值已经存在,则插入失败(获取锁失败)
RedisLock.class.PHP
<?php
/**
*
Redis锁操作类
*
Date:
2016-06-30
*
Author:
fdipzone
*
Ver:
1.0
*
*
Func:
*
public
lock
获取锁
*
public
unlock
释放锁
*
private
connect
连接
*/
class
RedisLock
{
//
class
start
private
$_config;
private
$_redis;
/**
*
初始化
*
@param
Array
$config
redis连接设定
*/
public
function
__construct($config=array()){
$this->_config
=
$config;
$this->_redis
=
$this->connect();
}
/**
*
获取锁
*
@param
String
$key
锁标识
*
@param
Int
$expire
锁过期时间
*
@return
Boolean
*/
public
function
lock($key,
$expire=5){
$is_lock
=
$this->_redis->setnx($key,
time()+$expire);
//
不能获取锁
if(!$is_lock){
//
判断锁是否过期
$lock_time
=
$this->_redis->get($key);
//
锁已过期,删除锁,重新获取
if(time()>$lock_time){
$this->unlock($key);
$is_lock
=
$this->_redis->setnx($key,
time()+$expire);
}
}
return
$is_lock?
true
:
false;
}
/**
*
释放锁
*
@param
String
$key
锁标识
*
@return
Boolean
*/
public
function
unlock($key){
return
$this->_redis->del($key);
}
/**
*
创建redis连接
*
@return
Link
*/
private
function
connect(){
try{
$redis
=
new
Redis();
$redis->connect($this->_config['host'],$this->_config['port'],$this->_config['timeout'],$this->_config['reserved'],$this->_config['retry_interval']);
if(empty($this->_config['auth'])){
$redis->auth($this->_config['auth']);
}
$redis->select($this->_config['index']);
}catch(RedisException
$e){
throw
new
Exception($e->getMessage());
return
false;
}
return
$redis;
}
}
//
class
end
?>
demo.php
<?php
require
'RedisLock.class.php';
$config
=
array(
'host'
=>
'localhost',
'port'
=>
6379,
'index'
=>
0,
'auth'
=>
'',
'timeout'
=>
1,
'reserved'
=>
NULL,
'retry_interval'
=>
100,
);
//
创建redislock对象
$oRedisLock
=
new
RedisLock($config);
//
定义锁标识
$key
=
'mylock';
//
获取锁
$is_lock
=
$oRedisLock->lock($key,
10);
if($is_lock){
echo
'get
lock
success<br>';
echo
'do
sth..<br>';
sleep(5);
echo
'success<br>';
$oRedisLock->unlock($key);
//
获取锁失败
}else{
echo
'request
too
frequently<br>';
}
?>
测试方法:
打开两个不同的浏览器,同时在A,B中访问demo.php
如果先访问的会获取到锁
输出
get
lock
success
do
sth..
success
另一个获取锁失败则会输出request
too
frequently
保证同一时间只有一个访问有效,有效限制并发访问。
为了避免系统突然出错导致死锁,所以在获取锁的时候增加一个过期时间,如果已超过过期时间,即使是锁定状态都会释放锁,避免死锁导致的问题。
源码下载地址:点击查看

Ⅲ php redis如何使用

开始在
PHP
中使用
Redis
前,要确保已经安装了
redis
服务及
PHP
redis
驱动,且你的机器上能正常使用
PHP。
PHP安装redis扩展
/usr/local/php/bin/phpize
#php安装后的路径
./configure
--with-php-config=/usr/local/php/bin/php-config
make
&&
make
install
修改php.ini文件
vi
/usr/local/php/lib/php.ini
增加如下内容:
extension_dir
=
"/usr/local/php/lib/php/extensions/no-debug-zts-20090626"
extension=redis.so
安装完成后重启php-fpm

apache。查看phpinfo信息,就能看到redis扩展。
连接到
redis
服务
<?php
//连接本地的
Redis
服务
$redis
=
new
Redis();
$redis->connect('127.0.0.1',
6379);
echo
"Connection
to
server
sucessfully";
//查看服务是否运行
echo
"Server
is
running:
"
.
$redis->ping();
?>
执行脚本,输出结果为:
Connection
to
server
sucessfully
Server
is
running:
PONG
Redis
PHP
String(字符串)
实例
<?php
//连接本地的
Redis
服务
$redis
=
new
Redis();
$redis->connect('127.0.0.1',
6379);
echo
"Connection
to
server
sucessfully";
//设置
redis
字符串数据
$redis->set("tutorial-name",
"Redis
tutorial");
//
获取存储的数据并输出
echo
"Stored
string
in
redis::
"
.
jedis.get("tutorial-name");
?>
执行脚本,输出结果为:
Connection
to
server
sucessfully
Stored
string
in
redis::
Redis
tutorial
Redis
PHP
List(列表)
实例
<?php
//连接本地的
Redis
服务
$redis
=
new
Redis();
$redis->connect('127.0.0.1',
6379);
echo
"Connection
to
server
sucessfully";
//存储数据到列表中
$redis->lpush("tutorial-list",
"Redis");
$redis->lpush("tutorial-list",
"Mongodb");
$redis->lpush("tutorial-list",
"Mysql");
//
获取存储的数据并输出
$arList
=
$redis->lrange("tutorial-list",
0
,5);
echo
"Stored
string
in
redis::
"
print_r($arList);
?>
执行脚本,输出结果为:
Connection
to
server
sucessfully
Stored
string
in
redis::
Redis
Mongodb
Mysql
Redis
PHP
Keys
实例
<?php
//连接本地的
Redis
服务
$redis
=
new
Redis();
$redis->connect('127.0.0.1',
6379);
echo
"Connection
to
server
sucessfully";
//
获取数据并输出
$arList
=
$redis->keys("*");
echo
"Stored
keys
in
redis::
"
print_r($arList);
?>
执行脚本,输出结果为:
Connection
to
server
sucessfully
Stored
string
in
redis::
tutorial-name
tutorial-list

Ⅳ php连接redis总是提示超时

服务器上的连接把IP改成本地IP:127.0.0.1试试看。

Ⅳ php怎样使用redis缓存数据

<?php
/**
* Redis缓存操作
* @author hxm
* @version 1.0
* @since 2015.05.04
*/
class RCache extends Object implements CacheFace
{
private $redis = null; //redis对象

private $sId = 1; //servier服务ID

private $con = null;//链接资源

/**
* 初始化Redis
*
* @return Object
*/
public function __construct()
{
if ( !class_exists('Redis') )
{
throw new QException('PHP extension does not exist: Redis');
}
$this->redis = new Redis();
}

/**
* 链接memcahce服务
*
* @access private
* @param string $key 关键字
* @param string $value 缓存内容
* @return array
*/
private function connect( $sid )
{
$file = $this->CacheFile();
require $file;
if(! isset($cache) )
{
throw new QException('缓存配置文件不存在'.$file);
}
$server = $cache[$this->cacheId];
$sid = isset($sid) == 0 ? $this->sId : $sid;//memcache服务选择
if ( ! $server[$sid])
{
throw new QException('当前操作的缓存服务器配置文件不存在');
}希望能帮到你,我还在后盾网学习呢,有不会的可以问我,一会有空回答你。(^ω^)

Ⅵ php访问redis扩展应该使用哪个版本

5.3以上的版本,现在基本都是5.6以上版本了吧?更多的是应该考虑以后升级迭代的成本和系统的稳定性成本吧?
你可以去后盾人平台看看,里面的东西不错

Ⅶ php连接redis是什么服务类型

要在PHP程序中使用Redis,首先需要确保Redis的PHP驱动程序和PHP安装设置在机器上。可以查看PHP教程教你如何在机器上安装PHP。现在,让我们来看看一下如何设置Redis的PHP驱动程序。
需要从github上资料库:https://github.com/nicolasff/phpredis下载phpredis。下载完成以后,将文件解压缩到phpredis目录。在Ubuntu上安装这个扩展,可使用如下图所示的命令来安装。
cdphpredis
sudophpize
sudo./configure
sudomake
sudomakeinstall
现在,复制和粘贴“moles”文件夹的内容复制到PHP扩展目录中,并在php.ini中添加以下几行。
extension=redis.so
现在Redis和PHP安装完成。
连接到Redis服务器
<?php
//
$redis=newRedis();
$redis->connect('127.0.0.1',6379);
echo"Connectiontoserversucessfully";
//
echo"Serverisrunning:".$redis->ping();
?>
当执行程序时,会产生下面的结果:
Connectiontoserversucessfully
Serverisrunning:PONG
Redis的PHP字符串实例
<?php
//
$redis=newRedis();
$redis->connect('127.0.0.1',6379);
echo"Connectiontoserversucessfully";
//setthedatainredisstring
$redis->set("tutorial-name","Redistutorial");
//Getthestoreddataandprintit
echo"Storedstringinredis::".$redis.get("tutorial-name");
?>
当执行程序时,会产生下面的结果:
Connectiontoserversucessfully
Storedstringinredis::Redistutorial
Redis的PHP列表示例
<?php
//
$redis=newRedis();
$redis->connect('127.0.0.1',6379);
echo"Connectiontoserversucessfully";
//storedatainredislist
$redis->lpush("tutorial-list","Redis");
$redis->lpush("tutorial-list","Mongodb");
$redis->lpush("tutorial-list","Mysql");
//Getthestoreddataandprintit
$arList=$redis->lrange("tutorial-list",0,5);
echo"Storedstringinredis::"
print_r($arList);
?>
当执行程序时,会产生下面的结果:
Connectiontoserversucessfully
Storedstringinredis::
Redis
Mongodb
Mysql
Redis的PHP键例
<?php
//
$redis=newRedis();
$redis->connect('127.0.0.1',6379);
echo"Connectiontoserversucessfully";
//Getthestoredkeysandprintit
$arList=$redis->keys("*");
echo"Storedkeysinredis::"
print_r($arList);
?>
当执行程序时,会产生下面的结果:
Connectiontoserversucessfully
Storedstringinredis::
tutorial-name
tutorial-list

Ⅷ php 连接redis,怎么判断Redis是否挂掉

一般链接redis,如果链接不上,或者redis挂掉,都会发生超时,你可以设置超时时间短一点,比如5秒。如果5秒链接不上则不连接了,继续往下,不影响整体代码运行。
<?php
$redis = new \Redis();
$redis->connect($config['host'],$config['port'], $config['timeout']);一般来说,你可以多去后盾人学习,这样相关的问题都能够得到解决

Ⅸ php 连接redis,怎么判断Redis是否挂掉

一般链接redis,如果链接不上,或者redis挂掉,都会发生超时,你可以设置超时时间短一点,比如5秒。如果5秒链接不上则不连接了,继续往下,不影响整体代码运行。

<?php
$redis=newRedis();
$redis->connect($config['host'],$config['port'],$config['timeout']);
$redis->ping();//检测当前链接状态,返回PONG或者抛出异常。

Ⅹ 为什么php调用redis 返回+ok

Redis::__construct构造函数
$redis = new Redis();
connect, open 链接redis服务
参数
host: string,服务地址
port: int,端口号
timeout: float,链接时长 (可选, 默认为 0 ,不限链接时间)
注: 在redis.conf中也有时间,默认为300
pconnect, popen 不会主动关闭的链接
参考上面
setOption 设置redis模式
getOption 查看redis设置的模式
ping 查看连接状态
KEY相关操作
DEL
移除给定的一个或多个key。
如果key不存在,则忽略该命令。
时间复杂度:
O(N),N为要移除的key的数量。
移除单个字符串类型的key,时间复杂度为O(1)。
移除单个列表、集合、有序集合或哈希表类型的key,时间复杂度为O(M),M为以上数据结构内的元素数量。
返回值:
被移除key的数量。这样呢我自己学习在后盾人看见的,老师讲的很详细,希望对你有用😊(ง •̀_•́)ง努力

热点内容
疯狂java视频 发布:2025-02-12 19:38:17 浏览:149
flash免费上传网站 发布:2025-02-12 19:14:03 浏览:190
买脚本一般都在哪里 发布:2025-02-12 19:08:07 浏览:823
恋舞刷分脚本se下载 发布:2025-02-12 18:56:53 浏览:8
c语言大小写转换程序 发布:2025-02-12 18:55:23 浏览:524
三星耳机坏了怎么配置 发布:2025-02-12 18:54:46 浏览:975
简易编程语言 发布:2025-02-12 18:48:07 浏览:523
咋上传视频 发布:2025-02-12 18:45:50 浏览:288
python的包机制 发布:2025-02-12 18:45:49 浏览:448
sqlserver网络实用工具 发布:2025-02-12 18:38:56 浏览:767