对于高并发,访问量大的web应用而言,数据库操作是最容易出现瓶颈的地方,这个时候必然就会使用一些缓存系统,而Redis就是一个key-value存储系统,和Memcached类似。但相比起来 redis 要灵活很多,新浪微博就是用的redis集群的。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,Python,Ruby,Erlang,PHP等客户端,使用很方便。

若想在PHP中使用redis,首先要先安装redis。然后在PHP中配置redis扩展。对于新版本的Redis来说,安装跟配置扩展都相当简单,在这里就不详细说了。

下面给出 PHP Redis 的一个常用操作类

class MyRedis {

private $redis;

/**

* @param string $host

* @param int $post

*/

public function __construct($host = '192.168.1.8', $port = 6379) {

$this->redis = new Redis();

$this->redis->connect($host, $port);

return $this->redis;

}

/**

* 设置值 构建一个字符串

* @param string $key KEY名称

* @param string $value 设置值

* @param int $timeOut 时间 0表示无过期时间

*/

public function set($key, $value, $timeOut=0) {

$retRes = $this->redis->set($key, $value);

if ($timeOut > 0)

$redis->expire('$key', $timeOut);

return $retRes;

}

/*

* 构建一个集合(无序集合)

* @param string $key 集合Y名称

* @param string|array $value 值

*/

public function sadd($key,$value){

return $this->redis->sadd($key,$value);

}

/*

* 构建一个集合(有序集合)

* @param string $key 集合名称

* @param string|array $value 值

*/

public function zadd($key,$value){

return $this->redis->zadd($key,$value);

}

/**

* 取集合对应元素

* @param string $setName 集合名字

*/

public function smembers($setName){

return $this->redis->smembers($setName);

}

/**

* 构建一个列表(先进后去,类似栈)

* @param sting $key KEY名称

* @param string $value 值

*/

public function lpush($key,$value){

echo "$key - $value \n";

return $this->redis->LPUSH($key,$value);

}

/**

* 构建一个列表(先进先去,类似队列)

* @param sting $key KEY名称

* @param string $value 值

*/

public function rpush($key,$value){

echo "$key - $value \n";

return $this->redis->rpush($key,$value);

}

/**

* 获取所有列表数据(从头到尾取)

* @param sting $key KEY名称

* @param int $head 开始

* @param int $tail 结束

*/

public function lranges($key,$head,$tail){

return $this->redis->lrange($key,$head,$tail);

}

/**

* HASH类型

* @param string $tableName 表名字key

* @param string $key 字段名字

* @param sting $value 值

*/

public function hset($tableName,$field,$value){

return $this->redis->hset($tableName,$field,$value);

}

public function hget($tableName,$field){

return $this->redis->hget($tableName,$field);

}

/**

* 设置多个值

* @param array $keyArray KEY名称

* @param string|array $value 获取得到的数据

* @param int $timeOut 时间

*/

public function sets($keyArray, $timeout) {

if (is_array($keyArray)) {

$retRes = $this->redis->mset($keyArray);

if ($timeout > 0) {

foreach ($keyArray as $key => $value) {

$this->redis->expire($key, $timeout);

}

}

return $retRes;

} else {

return "Call " . __FUNCTION__ . " method parameter Error !";

}

}

/**

* 通过key获取数据

* @param string $key KEY名称

*/

public function get($key) {

$result = $this->redis->get($key);

return $result;

}

/**

* 同时获取多个值

* @param ayyay $keyArray 获key数值

*/

public function gets($keyArray) {

if (is_array($keyArray)) {

return $this->redis->mget($keyArray);

} else {

return "Call " . __FUNCTION__ . " method parameter Error !";

}

}

/**

* 获取所有key名,不是值

*/

public function keyAll() {

return $this->redis->keys('*');

}

/**

* 删除一条数据key

* @param string $key 删除KEY的名称

*/

public function del($key) {

return $this->redis->delete($key);

}

/**

* 同时删除多个key数据

* @param array $keyArray KEY集合

*/

public function dels($keyArray) {

if (is_array($keyArray)) {

return $this->redis->del($keyArray);

} else {

return "Call " . __FUNCTION__ . " method parameter Error !";

}

}

/**

* 数据自增

* @param string $key KEY名称

*/

public function increment($key) {

return $this->redis->incr($key);

}

/**

* 数据自减

* @param string $key KEY名称

*/

public function decrement($key) {

return $this->redis->decr($key);

}

/**

* 判断key是否存在

* @param string $key KEY名称

*/

public function isExists($key){

return $this->redis->exists($key);

}

/**

* 重命名- 当且仅当newkey不存在时,将key改为newkey ,当newkey存在时候会报错哦RENAME

* 和 rename不一样,它是直接更新(存在的值也会直接更新)

* @param string $Key KEY名称

* @param string $newKey 新key名称

*/

public function updateName($key,$newKey){

return $this->redis->RENAMENX($key,$newKey);

}

/**

* 获取KEY存储的值类型

* none(key不存在) int(0) string(字符串) int(1) list(列表) int(3) set(集合) int(2) zset(有序集) int(4) hash(哈希表) int(5)

* @param string $key KEY名称

*/

public function dataType($key){

return $this->redis->type($key);

}

/**

* 清空数据

*/

public function flushAll() {

return $this->redis->flushAll();

}

/**

* 返回redis对象

* redis有非常多的操作方法,我们只封装了一部分

* 拿着这个对象就可以直接调用redis自身方法

* eg:$redis->redisOtherMethods()->keys('*a*') keys方法没封

*/

public function redisOtherMethods() {

return $this->redis;

}

}

php ayyay,在PHP中使用Redis相关推荐

  1. c#获取对象的唯一标识_在 Java 中利用 redis 实现分布式全局唯一标识服务

    作者: 杨高超 juejin.im/post/5a4984265188252b145b643e 获取全局唯一标识的方法介绍 在一个IT系统中,获取一个对象的唯一标识符是一个普遍的需求.在以前的单体应用 ...

  2. 在java中使用redis

    在java中使用redis很简单,只需要添加jedist.jar,通过它的api就可以了.而且,api和redis的语法几乎完全相同.以下简单的测试: 参考:http://www.runoob.com ...

  3. django 框架中应用 redis 集群

    1. 在 setting.py 中添加 : CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION' ...

  4. 在 Java 中利用 redis 实现 LBS 服务

    前言 LBS(基于位置的服务) 服务是现在移动互联网中比较常用的功能.例如外卖服务中常用的我附近的店铺的功能,通常是以用户当前的位置坐标为基础,查询一定距离范围类的店铺,按照距离远近进行倒序排序. 自 ...

  5. PHP中使用redis执行lua脚本示例

    一.引言 redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入到大多数语言当中,来扩展其功 ...

  6. windos中加入redis

    windos中加入redis sc create redis binPath= D:\redis\redis-server.exe start= auto 最近用php开发了一个redis程序,当要部 ...

  7. springboot中使用redis详解

    一.redis简介 redis是一款高性能key-value(键值对)内存型数据库,是非关系型数据库的一种,它采用单线程的架构方式,避免了多线程存在的锁处理造成的资源耗费,读取速度非常快,非常适合变化 ...

  8. win10下使用python访问vmbox中的redis

    了解到redis没有windows的官方支持,所以在vmbox中的ubuntu装了redis#在ubuntu中 #搜索redis相关软件信息 apt-cache search ^redis #不清楚为 ...

  9. linux连接redis 命令_在Docker中使用Redis

    1. 简介 本文章将介绍如何使用 Docker 探索 Redis.我们可以在 Docker for Windows .Docker for mac 或者 Linux 模式下运行 Docker 命令. ...

  10. openresty开发系列27--openresty中封装redis操作

    openresty开发系列27--openresty中封装redis操作 在关于web+lua+openresty开发中,项目中会大量操作redis, 重复创建连接-->数据操作-->关闭 ...

最新文章

  1. Java项目:酒店管理系统(java+SSM+jsp+mysql+maven)
  2. Aysnc的异步执行的线程池
  3. BootStrap-select插件动态添加option无法显示
  4. Android进阶笔记09:Android 万能适配器
  5. 进程调度算法Java代码
  6. ado.net连接mysql 类_C# ADO.NET 连接数据库常用到的类及基本操作格式
  7. Boost:基于boost::asio的延迟udp服务器测试程序
  8. 学界 | CVPR 2018颁布五大奖项,何恺明获年轻学者奖
  9. 如何在自己开发的日程管理页面插入提醒功能_给大家推荐一款高颜值的日程管理类APP...
  10. AppBarLayout中的Android TabLayout
  11. python模拟登陆豆瓣_模拟登陆豆瓣并爬取个人主页(爬虫项目三)
  12. AxureRP9(team版)安装+汉化+秘钥
  13. Matlab求解微分、积分方程
  14. 核方法概述----正定核以及核技巧(Gram矩阵推导正定核)
  15. 高大上:光学技术“回归”地球整出“彩虹车站”
  16. Minecraft 1.16.5模组开发(五十) 书籍词典 (Guide Book)
  17. 高防CDN有什么优点
  18. AI纪事|深度学习保护濒危语言
  19. 刷新页面仍保留当前数据显示
  20. IDEA 报错 Error:java:错误:不支持发行版本5

热门文章

  1. java byte与char互转原理
  2. python 字符串 换行_Python基础教程——字符串
  3. POJ 1226 Substrings(后缀数组)
  4. 几个Cache方案的比较
  5. R6300V2 从 DD-WRT 回刷恢复 官方原厂固件   DD-WRT to R6300V2
  6. 关于-最佳的业务连续性容灾架构设计
  7. ORACLE ERP 的前世今生(1)
  8. “Error:(1, 1) java: 非法字符: '\ufeff'”错误解决办法
  9. 爱奇艺开播助手Flutter跨平台Hybrid实践\n
  10. Service Mesh简介