redis学习-1

本文详细介绍了Redis中的数据类型,包括字符串、列表、集合、有序集合和哈希,以及它们的常用操作,如写入、删除、修改和获取数据。通过示例代码展示了如何在PHP中使用Redis进行数据缓存,强调了Redis在减轻服务器压力、提高数据访问速度方面的作用。此外,还讨论了Redis的缓存穿透、雪崩等问题以及解决方案。
摘要由CSDN通过智能技术生成

(1)redis

redis? 为什么要缓存?队列缓存,减少服务器的压力,提高速度->8w-10w
redis cache

用户/PC/APP->(前后端分离)->请求服务器(PHP+MYSQL)返回数据
用户-》服务(service)先->cache,redis;再到mysql
缓存内容:二八定律 热点 ,
数据不一致:分情况读还是写=》缓存不命中:
缓存命中率=缓存命中数/总缓存访问数
cache redis->读:没命中,缓存穿透,雪崩
             查询数据:数据库
             写:数据库|缓存(根据业务,先数据库再来淘汰缓存)
             key =>value
   数据不一致:并发读写=》命名空间,写:排他锁,文件 写 释放

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

什么是redis

redis :是一个开源的使用C语言编写,支持网络,可基于内存亦可持久化的日志型,key-value数据库
        也是一个软件
1.支持多种数据类型的存取数据
2.支持持久化存储数据

应用场景:
1.数据缓存
2.消息队列
3.排行榜
4.计数

先有服务才有客户端
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
混乱:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

操作字符窜类型数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.redis操作字符窜类型

####### 操作字符窜类型数据
1.创建redis对象
2.连接redis服务器
3.写入数据/读取数据/删除数据

1.集合中的元素都是不重复的
2.apache服务器当然不是只能浏览器才能访问

其他的(浏览器,android,ios,其他语言)也可以访问apache 【home,index.php】

浏览器->访问->apache->php->redis服务<->redis-cli

---------------------------------
## 连接redis
## 数据类型操作(字符窜操作,链表操作,无序集合操作,有序集合操作,哈希操作)
#################  1.操作字符窜类型数据
1.写入
$res = $redis->set('key-1'.'value-1');
$res = $redis->setex('key-2',10,'value-2');//第二个参数为声明周期(单位为秒)
$res = $redis->mset(['key-4'=>'value-4','key-5'=>'value-5','key-6'=>'value-6'])批量写入
$res = $redis->setnx('key-3'=>'value-3');//如果键名key-3存在则不写入,否则写入

2.删除
$res = $redis->delete('key-3');
$res = $redis->delete(['key-1','key-2]);

3.修改
$res = $redis->set('key-1','value-1');
$res = $redis->incr('total');//自增
$res = $redis->incrBy('total-3',3);//指定步进自增
$res = $redis->decr('total');//递减
$res = $redis->decrBy('total',10);//指定步进递减

4.获取
$res = $redis->get('key-1');
$res = $redis->mget(['key-4','key-5','key-6']);
<?php
//创建redis对象
$redis = new Redis();
//连接redis服务器
$redis->connect('127.0.0.1',6379);
//输入密码
$redis->auth('');
//写入数据
$res=$redis->set('name','zhangsan');
var_dump($res);//bool(true)

启动redis服务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.1写入

<?php
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(1);
//写入字符窜类型的值
$res = $redis->set('week','礼拜五');
var_dump($res);//bool(true)

在这里插入图片描述

<?php
/**
 * 1.写入
$res = $redis->set('key-1','value-1');
$res = $redis->setex('key-2',10,'value-2');//第二个参数为声明周期(单位为秒),为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
extent n. 程度;范围,长度
$res = $redis->mset(['key-4'=>'value-4','key-5'=>'value-5','key-6'=>'value-6'])批量写入,用于同时设置一个或多个 key-value 对。
 * multiple adj. 多个的,多种的;多人共有的;影响身体许多部位的
$res = $redis->setnx('key-3'=>'value-3');//如果键名key-3存在则不写入,否则写入
 * SET if Not eXists
 */

//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(1);

//1.写入字符窜类型的值  $res = $res->set(键,值);
//$res1 = $redis->set('week','礼拜五');

//2.时效性的设置 $redis->setex(键,时间设置(秒),值);
$res2 = $redis->setex('test',10,'iloveu');//10秒之内能看到

//3.批量设置 $redis->mset([键1=>值1,键2=>值2,键3=>值3])批量写入,用于同时设置一个或多个 key-value 对。
$res3 = $redis->mset(['a'=>'aaa','b'=>'bbb','c'=>'ccccc']);

//设置a  $redis->setnx(键=>值) 如果键名存在则不写入,否则写入
$res4 = $redis->setnx('d','ddddd');//如果不存在d键值则写入返回true,否则返回false

//var_dump($res);//bool(true)

在这里插入图片描述

1.2删除

<?php
//删除
/**
 * Redis DEL 命令用于删除已存在的键。不存在的 key 会被忽略。
2.删除
$res = $redis->del('键值名');
$res = $redis->del(['键值名1','键值名2]);

 */
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(1);

$res = $redis->del('a');
$res = $redis->del(['b','c']);
var_dump($res);

在这里插入图片描述

1.3修改

在这里插入图片描述
在这里插入图片描述

<?php
/**
3.修改
$res = $redis->incr('键名');//自增
$res = $redis->incrBy('键名',自增数量);//指定步进自增
 *
$res = $redis->decr('键名');//递减
$res = $redis->decrBy('键名',自减数量);//指定步进递减
 */

//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(1);

//修改明细
//自增
//$res = $redis->incr('total');//运行一次对应键值的值+1  int(1)
//$res = $redis->incrBy('total',5);运行一次对应键值的值+5 int(6)

//自减
//$res = $redis->decr('total'); //int(5)
$res = $redis->decrBy('total',10);//int(-5)

var_dump($res);

1.4获取

在这里插入图片描述

<?php
/**
 * 4.获取
$res = $redis->get('键值名');
$res = $redis->mget(['键值名1','键值名2','键值名3']);
 */
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(1);

//1.获取
//$res = $redis->get('d');//string(5) "ddddd"

//批量获取
$res=$redis->mget(['total','d','week']);//array(3) { [0]=> string(2) "-3" [1]=> string(5) "ddddd" [2]=> string(9) "绀兼嫓浜�" }

var_dump($res);

2.操作列表数据

在这里插入图片描述

2.1列表添加

在这里插入图片描述

在这里插入图片描述
https://github.com/phpredis/phpredis/#readme
在这里插入图片描述

<?php
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);

/***
 * Redis Lpush 命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。
 */

//写入
   //单个写入
  // $res=$redis->lPush('list1','zhangsan');
  // $res=$redis->lPush('list1','lisi');
  // $res=$redis->lPush('list1','wangwu');
//var_dump($res);//int(3)
/**
 * list1键值:
 *  row  value
 *  1   wangwu
 *  2   lisi
 *  3   zhangsan
 */

//批量写入
$res= $redis->lPush('list1','zhaoliu','liqi');
var_dump($res);//int(5)
/**
 * list1键值:
 *  row  value
 *  1   liqi
 *  2   zhaoliu
 *  3   wnagwu
 *  4   lisi
 *  5   zhangsan
 */


在这里插入图片描述

<?php
/****
 redis Linsert 命令用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。
当列表不存在时,被视为空列表,不执行任何操作。
如果 key 不是列表类型,返回一个错误。
语法:
redis Linsert 命令基本语法如下:
LINSERT key BEFORE|AFTER pivot value
 ---------------------------------------------------------------------------------
 * Redis Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。
如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。
 返回值:执行 RPUSH 操作后,列表的长度。
 *
 */

//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);

//尾部插入
//$res = $redis->rPush('list-1','a');
//$res = $redis->rPush('list-1','b');
//$res = $redis->rPush('list-1','c','d','e');

/***
 * list-1
 * row value
 * 1   a
 * 2   b
 * 3   c
 * 4   d
 * 5   e
 */

//在指定的方法中插入
$res = $redis->lInsert('list-1',Redis::BEFORE,'a','new_comer');//在a前面插入new_comer
var_dump($res);//int(6)
/***
 * list-1
 * row value
 * 1   new_comer
 * 2   a
 * 3   b
 * 4   c
 * 5   d
 * 6   e
 */

在这里插入图片描述

2.2列表删除

在这里插入图片描述

<?php
/**
$res =$redis->lpop('键名');//头部弹出一个值
$res =$redis->rpop('键名');//尾部弹出一个值
$res = $redis->lrem('键名1','值',1);//移出链表的指定值
 *
 Redis Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
COUNT 的值可以是以下几种:
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
count = 0 : 移除表中所有与 VALUE 相等的值。
返回值:
被移除元素的数量。 列表不存在时返回 0 。
 */
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);

//$res = $redis->lPop("list1");//string(4) "liqi"
/**
删掉头部的第一个row(1) value(liqi)
 * 删除lpop前
 * * list1键值:
 *  row  value
 *  1   liqi
 *  2   zhaoliu
 *  3   wnagwu
 *  4   lisi
 *  5   zhangsan
 * 删除后list1键值:
 *  row  value
 *  1   zhaoliu
 *  2   wnagwu
 *  3   lisi
 *  4   zhangsan
 **/

//$res = $redis->rPop('list1');//string(8) "zhangsan"
//var_dump($res);
/**
删掉尾部的最后一个元素
 * 删除rpop前
 * * list1键值:
 *  row  value
 *  1   zhaoliu
 *  2   wangwu
 *  3   lisi
 *  4   zhangsan
 * 删除后list1键值:
 *  row  value
 *  1   zhaoliu
 *  2   wangwu
 *  3   lisi
 **/

$res =$redis->lRem('list1','lisi',1);//移出链表的指定值,返回被移出元素的数量
var_dump($res);//int(1)
//没有找到的时候:int(0) 列表不存在时返回 0

2.3列表修改

在这里插入图片描述

<?php
/**
2.3修改
$res = $redis->lset('键名',n,'值');//修改第n个元素的值
 *Redis Lset 通过索引来设置元素的值。
当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误
 *
$res = $redis->rpoplpush('键值名1','键值名2');//把值从一个链表的右侧弹出,插入到另一个集合的左侧
 *
 * Redis Rpoplpush 命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
 * 返回值:被弹出的元素
 **/
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);

#$res = $redis->lSet('list1',0,'xiugaihou');//bool(true)
#$res = $redis->lSet('list1',3,'xiugaihou');//bool(false) 索引参数超过范围返回false
/**
 * 2号库下面的键list1的索引0号的值变为xiugaihou
 *list1
 * row  value
 * 1     xiugaihou
 */

$res = $redis->rpoplpush('list1','list-1');//把list尾部的最后一个元素移动到list-1列表的头部返回弹出的元素string(9) "xiugaihou"
var_dump($res);
//当一个键没有值得时候就直接消失了

2.4列表获取

在这里插入图片描述

<?php
/***
 *2.4 获取
$res = $redis->lindex('键名',n);//获取第n个元素的值
 *Redis Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
 *返回值: 列表中下标为指定索引值的元素。 如果指定索引值不在列表的区间范围内,返回 false
$res = $redis->lrange('键名',0,-1);//获取链表中一段的值
 * Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。
 * 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,
 * 以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
 *返回值: 一个列表,包含指定区间内的元素。

$res = $redis->llen('键名');//获取链表的长度
 */

//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);
/***
 * list-1
 * row value
 * 1  xiugaihou
 * 2   new_comer
 * 3   a
 * 4   b
 * 5   c
 * 6   d
 * 7   e
 */

//$res = $redis->lIndex('list-1',2);//获取失败的时候返回false,成功的时候返回获取到的值string(1) "a"
$res =$redis->lRange('list-1',0,-1);//获取键list-1所有值
//array(7) {
// [0]=> string(9) "xiugaihou"
// [1]=> string(9) "new_comer"
// [2]=> string(1) "a"
// [3]=> string(1) "b"
// [4]=> string(1) "c"
// [5]=> string(1) "d"
// [6]=> string(1) "e" }

$res =$redis->lRange('list-1',2,4);//获取到索引从2-4的值
var_dump($res);//array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" }

echo '<hr/>';

$len = $redis->lLen('list-1');//返回链表的长度
var_dump($len);//int(7)

3.无序集合操作

##########################   3.操作无序集合
Redis 集合(Set)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
集合对象的编码可以是 intset 或者 hashtable。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)


### 1.添加
$res = $redis->sadd('键名',);
$res = $redis->sadd('键名',1,2,3,4);

### 2.删除
$res = $redis->srem('键名','1';
Redis Srem 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。
当 key 不是集合类型,返回一个错误。

### 3.修改
$res = $redis->sMove('键值1','键值2','值');//将一个值从一个集合移动到另一个集合

Redis Smove 命令将指定成员 member 元素从 source 集合移动到 destination 集合。
SMOVE 是原子性操作。
如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。
否则,
member 元素从 source 集合中被移除,并添加到 destination 集合中去。
当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将
 source 集合中的 member 元素删除。
当 source 或 destination 不是集合类型时,返回一个错误。

## 4.拿到
$res = $redis->smembers('键值');//获取集合中所有的值
$res = $redis->scard('键值');//获得集合中的元素的个数
$res = $redis->srandmember('键值');//随机获取集合中的一个元素
$res = $redis->sinter('键值1','键值2');//获取交集
$res = $redis->sunion('键值1','键值2');//获取并集
$res = $redis->sdiff('键值1','键值2');//获取差集
$res = $redis->sismember('键值1','值');//检测集合中是否存在该值





在这里插入图片描述

3.1添加

在这里插入图片描述

<?php

/**
### 1.添加
$res = $redis->sadd('键名',值);
$res = $redis->sadd('键名',值1,值2,值3,值4);
 *Redis Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。
 *假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。
 *当集合 key 不是集合类型时,返回一个错误。
 *
**/
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);
$res = $redis->sadd('sports','篮球');//int(1)
$res = $redis->sAdd('sports','乒乓球','羽毛球','足球','台球','桌上足球');//int(5)
var_dump($res);//int(5)

/**
 * sports:
 *row value
   1   羽毛球
   2   足球
   3   台球
 * 4   桌上足球
 * 5   乒乓球
 * 6   篮球
 **/


3.2删除

在这里插入图片描述

<?php
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);

/**
 * $res = $redis->srem('键名','1');
Redis Srem 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。
当 key 不是集合类型,返回一个错误。
 */
/**
 *sports:
row value
1   羽毛球
2   足球
3   台球
4   桌上足球
5   乒乓球
6   篮球
 **/

$res = $redis->sRem('sports','1');//int(0)
$res = $redis->sRem('sports','足球');//int(1)
var_dump($res);
//*sports:
//row value
//1   桌上足球
//2   乒乓球
//3   篮球
//4   台球
//5   羽毛球
//**/


3.3修改

<?php
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);

/**
 * Redis Smove 命令将指定成员 member 元素从 source 集合移动到 destination 集合。
SMOVE 是原子性操作。
如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则,
 * member 元素从 source 集合中被移除,并添加到 destination 集合中去。
当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。
当 source 或 destination 不是集合类型时,返回一个错误。
 */
$res = $redis->sAdd('skills','draw','cook','guitar','piano','puzzle');//int(5)
$res = $redis->sMove('sports','skills','篮球');//将一个值从一个集合移动到另一个集合
var_dump($res);//bool(true)
/***
 * skils:
 * row value
 * 1   cook
 * 2   draw
 * 3   puzzle
 * 4  piano
 * 5  篮球
 * 6   guitar
 */

//*sports:
//row value
//1   桌上足球
//2   乒乓球
//4   台球
//5   羽毛球
//**/


在这里插入图片描述

3.4获取

在这里插入图片描述

<?php
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);
/**
 * $res = $redis->smembers('键值');//获取集合中所有的值
$res = $redis->scard('键值');//获得集合中的元素的个数
$res = $redis->srandmember('键值');//随机获取集合中的一个元素
$res = $redis->sinter('键值1','键值2');//获取交集
$res = $redis->sunion('键值1','键值2');//获取并集
$res = $redis->sdiff('键值1','键值2');//获取差集
$res = $redis->sismember('键值1','值');//检测集合中是否存在该值
 */

//拿到
$res=$redis->sMembers('sports');//获取集合中所有的值
var_dump($res);//array(4) { [0]=> string(9) "乒乓球" [1]=> string(6) "台球" [2]=> string(12) "桌上足球" [3]=> string(9) "羽毛球" }
echo '<hr/>';
$res2 = $redis->sCard('sports');//获得集合中的元素的个数
var_dump($res2);
echo '<hr/>';
$res3 = $redis->sRandMember('sports');//随机获取集合中的一个元素
var_dump($res3);
echo '<hr/>';
$res4= $redis->sIsMember('sports','台球');//检测集合中是否存在该值
var_dump($res4);
//array(4) { [0]=> string(9) "乒乓球" [1]=> string(6) "台球" [2]=> string(12) "桌上足球" [3]=> string(9) "羽毛球" }
//int(4)
//string(9) "羽毛球"
//bool(true)

4.有序集合

#########   Redis 有序集合(sorted set)
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合
中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)-----------------------------------------------------------------------------------------
    有序集合
1.添加
$res = $redis->zadd('键',权重,);
2.删除
$res = $redis->zrem('键','值');
3.更新
$res = $redis->zincrby('键','分数score','值');//把键对应下的值的score+上分数score
4.获取
$res = $redid->zrange('键',0,-1);获取所有的元素
$res = $redis->zrevrange('zret',0,-1);//倒叙获取所有元素
$res = $redis->zrangebyscore('zset',0,10,['withscores'=>true,'limit'=>[0,2]]);
//按照权重范围进行获取

$res = $redis->zcount('zset',3,10);//返回权重区间中元素的个数
$res = $redis->zCard('zset','v7');//获取单个值的权重
$res = $redis->zscore('zset','v7');//获取单个值的权重
$res = $redis->zrank('zset','v7');//获取某个值的排名
$res = $redis->zrevrank('zset','v7');//获取某个值的倒叙排名

在这里插入图片描述

4.1有序集合的添加

在这里插入图片描述

<?php
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);
//1	ZADD key score1 member1 [score2 member2]
//向有序集合添加一个或多个成员,或者更新已存在成员的分数
//$res = $redis->zAdd('grade',50,'zhangsan');
//$res = $redis->zAdd('grade',99,'lisi');
//$res = $redis->zAdd('grade',80,'wangwu');
//$res = $redis->zAdd('grade',75,'zhaoliu');
//$res = $redis->zAdd('grade',86,'zhaoqi');

$res = $redis->zAdd('grade',65,'a');
$res = $redis->zAdd('grade',78,'b');
$res = $redis->zAdd('grade',69,'c');
$res = $redis->zAdd('grade',90,'d');


/***
 * db2下的键grade:
 * row  value      score
 * 1    zhangsan   50
 * 2      a         65
 * 3      c         69
 * 4      zhaoliu   75
 * 5      b         78
 * 6    wangwu     80
 * 7   zhaoqi      86
 * 8   d           90
 * 9   lisi        99
 */
var_dump($res);//int(1)

4.2有序集合的删除

在这里插入图片描述

<?php
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);

//Redis Zrem 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。
//当 key 存在但不是有序集类型时,返回一个错误。
//注意: 在 Redis 2.4 版本以前, ZREM 每次只能删除一个元素。

$res = $redis->zRem('grade','b');//删除b

/***
 * db2下的键grade:
 * row  value      score
 * 1    zhangsan   50
 * 2      a         65
 * 3      c         69
 * 4    zhaoliu   75
 * 5    wangwu     80
 * 6   zhaoqi      86
 * 7   d           90
 * 8   lisi        99
 */
var_dump($res);//int(1)


4.3有序集合的修改

在这里插入图片描述

<?php
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);

//更新
$res = $redis->zIncrBy('grade',2,'zhangsan');//double(52)
var_dump($res);
/***
 * db2下的键grade:
 * row  value      score
 * 1    zhangsan   52
 * 2      a         65
 * 3      c         69
 * 4    zhaoliu   75
 * 5    wangwu     80
 * 6   zhaoqi      86
 * 7   d           90
 * 8   lisi        99
 */

4.4有序集合的获得

在这里插入图片描述
在这里插入图片描述

<?php
/**
 *
$res = $redid->zrange('键',0,-1);获取所有的元素
$res = $redis->zrevrange('zret',0,-1);//倒叙获取所有元素
$res = $redis->zrangebyscore('zset',0,10,['withscores'=>true,'limit'=>[0,2]]);//按照权重范围进行获取
 * Redis Zrangebyscore 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。
具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。
默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。
举个例子:
ZRANGEBYSCORE zset (1 5
返回所有符合条件 1 < score <= 5 的成员,而
ZRANGEBYSCORE zset (5 (10
则返回所有符合条件 5 < score < 10 的成员。
语法
redis Zrangebyscore 命令基本语法如下:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
redis 127.0.0.1:6379> ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
 *
$res = $redis->zcount('zset',3,10);//返回权重区间中元素的个数
$res = $redis->zCard('zset','v7');//获取单个值的权重
$res = $redis->zscore('zset','v7');//获取单个值的权重
$res = $redis->zrank('zset','v7');//获取某个值的排名
$res = $redis->zrevrank('zset','v7');//获取某个值的倒叙排名
 */
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);

/***
 * db2下的键grade:
 * row  value      score
 * 1    zhangsan   52
 * 2      a         65
 * 3      c         69
 * 4    zhaoliu   75
 * 5    wangwu     80
 * 6   zhaoqi      86
 * 7   d           90
 * 8   lisi        99
 */
//得到有序集合的值
$res = $redis->zRange('grade',0,2);
var_dump($res);//array(3) { [0] => string(8) "zhangsan" [1] => string(1) "a" [2] => string(1) "c" }
echo '<hr/>';

$res = $redis->zRevRange('grade',0,2);//倒序
var_dump($res);// array(3) { [0] => string(4) "lisi" [1] => string(1) "d" [2] => string(6) "zhaoqi" }
echo '<hr/>';

//根据权重的范围获取数据
$res = $redis->zRangeByScore('grade',80,90);
var_dump($res);//array(3) { [0] => string(6) "wangwu" [1] => string(6) "zhaoqi" [2] => string(1) "d" }
echo '<hr/>';

$res = $redis->zRangeByScore('grade',80,90,['withscores'=>true,'limit'=>[2,2]]);按照权重范围进行获取
var_dump($res);//array(1) { 'd' => double(90) }
echo '<hr/>';

//倒序获取
$res = $redis->zRevRangeByScore('grade',100,60,['widthscores'=>true]);
var_dump($res);//array(7) { [0] => string(4) "lisi" [1] => string(1) "d" [2] => string(6) "zhaoqi" [3] => string(6) "wangwu" [4] => string(7) "zhaoliu" [5] => string(1) "c" [6] => string(1) "a" }
echo '<hr/>';

//获取权重区间的元素个数
$res = $redis->zCount('grade',80,100);//返回权重区间中元素的个数
var_dump($res);// int(4)
echo '<hr/>';

//获取元素的个数
$res  = $redis->zCard('grade');//获取单个值的权重
var_dump($res);// int(8)
echo '<hr/>';

//获取单个元素的权值
$res = $redis->zScore('grade','zhangsan');
var_dump($res);//double(52)
echo '<hr/>';

$res = $redis->zRank('grade','zhangsan');
var_dump($res); //int(0)
echo '<hr/>';

//获取数据的排名
$res = $redis->zRevRank('grade','zhangsan');
var_dump($res);// int(7)
echo '<hr/>';

5.操作哈希数据

在这里插入图片描述

5.1哈希写入

1.$res = $redis->hset('key','hashkey','value');//单个值写入
2.$res = $redis->hmset('key',[hashkey1=>value1,hashkey2=>value2]);//批量写入

在这里插入图片描述
在这里插入图片描述

<?php
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);

//单条写入
$res = $redis->hSet('phone','brand','apple');
var_dump($res);// int(1)

//批量写入
$res = $redis->hMSet('phone',['size'=>'4.9inch','price'=>2000,'color'=>'white']);
var_dump($res);//bool(true)


在这里插入图片描述

5.2哈希删除

在这里插入图片描述

<?php
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);
/**
 * ###2.删除
 * $res = $redis->hdel('key','hashkey');
 */

//删除
$res = $redis->hDel('phone','color');
var_dump($res);//int(1)
/***
 * hash:phone
 * row  key value
 * 1   brand apple
 * 2   size  4.9inch
 * 3   price  2000
 */

5.3哈希修改

在这里插入图片描述

<?php
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);

/**
 * ### 3.修改
$res = $redis->hset('key','hashkey','value');
$res = $redis->hincrby('key','total',1);//自增某个值
 */
//更新
$res = $redis->hSet('phone','price',1999);
//把price的值改为1999
var_dump($res);//int(0)

$res = $redis->hIncrBy('phone','age',1);
var_dump($res);//int(1)
/***
 * hash:phone
 * row  key value
 * 1   brand apple
 * 2   size  4.9inch
 * 3   price  1999
 * 4  age    1
 */


5.4哈希获取

在这里插入图片描述

<?php
//创建redis对象
$redis = new Redis;
//连接redis服务器
$redis->connect('localhost',6379);
//输入密码
$redis->auth('');
//选择数据库
$redis->select(2);

/**
 * ### 4.获取
$res = $redis->hget('key','hashkey');//获取键名的值
$res = $redis->hmget('key',[hashkey1,hashkey2]);//获取多个键名的值
$res = $redis->hgetall('key');//获取哈希下所有的值
$res = $redis->hlen('key');//获取哈希下元素的个数
$res = $redis->hkeys('key');//获取所有的键名
$res = $redis->hvals('key');//获取所有的键值
$res = $redis->hexists('key','hashkey');//检测哈希下是否存在该键名
 */
/***
 * hash:phone
 * row  key value
 * 1   brand apple
 * 2   size  4.9inch
 * 3   price  1999
 * 4  age    1
 */

//获取
$res = $redis->hGet('phone','brand');
var_dump($res);//string(5) "apple"
echo '<hr/>';

$res = $redis->hMGet('phone',['brand','price']);
var_dump($res);//array(2) { 'brand' => string(5) "apple" 'price' => string(4) "1999" }
echo '<hr/>';

//获取字段的个数
$res = $redis->hLen('phone');
var_dump($res);//int(4)
echo '<hr/>';

//获取所有的字段名
$res = $redis->hKeys('phone');
var_dump($res);//array(4) { [0] => string(5) "brand" [1] => string(4) "size" [2] => string(5) "price" [3] => string(3) "age" }
echo '<hr/>';

//获取所有的键值
$res = $redis->hVals('phone');
var_dump($res);//array(4) { [0] => string(5) "apple" [1] => string(7) "4.9inch" [2] => string(4) "1999" [3] => string(1) "1" }
echo '<hr/>';

//检测字段是否存在
$res = $redis->hExists('phone','brand');
var_dump($res);//bool(true)
echo '<hr/>';

//获取所有的字段信息
$res = $redis->hGetAll('phone');
var_dump($res);// array(4) { 'brand' => string(5) "apple" 'size' => string(7) "4.9inch" 'price' => string(4) "1999" 'age' => string(1) "2" }
echo '<hr/>';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值