Redis实例讲解
简介
Redis是一个key-value的nosql产品,和我们熟知的Memcached有些类似,但他存储value类型相对更加丰富,包括string(字符串),list(链表),set(集合),zset(sorted set 有序集合)和hash。与memcached一样,为了保证高效率,数据都是缓存在内存中。区别的是redis类型众多,也被称为结构化的nosql数据库,下面用PHP实例讲解各个数据类型的作用以及使用方式。
连接
//新建一个redis连接
$redis = new Redis();
//实例化,连接地址一般都是127.0.0.1,默认端口为6379
$redis->connect('127.0.0.1','6379');
//验证密码,如果没设置redis密码可忽略此操作
$redis->auth('123456');
数据类型
string字符串
$redis->set('test','hello redis');//存储或者更改string类型
list列表
方法中的l代表list操作
存储
$redis->lPush('list','小华');//从左边加入
$redis->rPush('list','小明');//从右边加入
$redis->lSet('list', 2, '红红萨日朗');//设置或更改列表指定位置的值,成功返回1,失败则返回错误信息
删除
$redis->lPop('list');//删除左边第一个
$redis->rPop('list');//删除右边第一个
/*
* 根据值删除元素,第二个参数是要删除的值(值为这个值的元素要被删除)
* 第三个参数表示从哪里开始删,删几个
* 参数>0 从表头往表尾开始删,删除第几个结束
* 参数<0 从表尾往表头开始删,删除几个。
* 参数=0 删除所有值为小明的元素
*/
$redis->lRem('list','小明',1);
获取
/*
* 第一个参数是列表名
* 第二个参数是起始下标位置
* 第三个参数是结束的下标位置(包含结束位元素)
* 负数代表倒数,-1则表示倒数第一个
* 如果起始大于结束则返回空,结束大于实际长度直接返回最后一个元素
* */
//会返回一个数组。存储在key中的列表里指定范围的元素
$redis->lRange('list',0,-1); //获取列表指定区间的值,同上
$redis->lGetRange('list',0,2); //截取并保留列表指定区间的值,其余值删除。成功返回1,失败返回错误信息。负数代表倒数
$redis->lTrim('list',0,2); //获取列表的长度
$redis->lSize('list'); //获取列表指定位置的值
$redis->lGet('list',1);
//同上
$redis->lIndex('list',1);
hash字典
hash一个string类型的field和value的映射表,特别适合用于存储对象。每个hash可以存储2的32次方 -1键值对(40多亿)hash表相当于 redis存储 key=>value 中的key,表内容相当于value方法中h代表hash操作
存储
/*
* 存储
* 如果hash表不存在,创建一个该hash表,如不存在则设置成功,返回true
* 如果存在,则替换掉原来的值,返回false,失败返回false
* 第一个参数是字典名
*/ //返回true
$redis->hSet('hashtest','a','testaa');
//返回false,将a的值改为testbb
$redis->hSet('hashtest','a','testbb');
//返回true,增加b值为testbb
$redis->hSet('hashtest','b','testbb'); //批量赋值
$redis->hMSet('hashtest',['1'=>'001','2'=>'002','3'=>'003']); /*
* hash表中的key对应的值自增1(整数)
* 第一个参数字典名
* 第二个参数是key名,
* 第三个参数是自增的幅度。如果表中不存在该key,则自动添加该key,并设置值为自增幅度
* */
$redis->hIncrBy('hashtest','1',1); //给hash表中key自增指定值
$redis->hIncrByFloat('hashtest','2',1.5);
获取
//获取指定的hashtest中a的值
$redis->hGet('hashtest','a'); //获取hash表中的所有keys(键名),返回一个数组
$redis->hKeys('hashtest'); //获取hash表中的所有值,顺序随机,返回一个数组
$redis->hVals('hashtest'); //获取hash表中所有的键与值,顺序随机,返回一个数组
$redis->hGetAll('hashtest'); //获取hash表中key的数量
$redis->hLen('hashtest'); //批量获取多个key对应的值;第二个参数是数组,返回一个数组
$redis->hMGet('hashtest',[1,2,3]); //判断hash表是否存在该key,存在返回1,不存在返回空
$redis->hExists('hashtest','2020');
删除
//hash表中的一个key,成功返回true,如果表或key不存在则返回true
$redis->hDel('hashtest','1');
set集合
Redis的set是string类型无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。集合中最大的成员为 2的32次方 -1(4294967295,每个集合可存储40多亿个成员).方法中的s代表set操作
存储
/*
* 往set集合中加入一个值,成功返回添加的个数 失败返回0.
* 第一个参数是set集合名
* 第二个参数是往该集合插入新值,即:往集合中插入新值
*/ //返回1
$redis->sAdd('settest1','aa');
//返回1
$redis->sAdd('settest1','bb','cc');
//返回0
$redis->sAdd('settest1','aa');
$redis->sAdd('settest2','cc');
//一次添加多个值 redis扩展4.0以上才支持
$redis->sAddArray('settest',['cc','dd','ee']);
获取
//获取所有集合中所有的元素
$redis->sMembers('settest1'); //判断元素是否是set成员 是返回1,不是返回空
$redis->sIsMember('settest1','bb'); //查看集合中元素的数量
$redis->sCard('settest1'); //返回两个集合的交集
$redis->sInter('settest1','settest2'); //将settest1和settest2的交集放到集合settest3中
$redis->sInterStore('settest3','settest1','settest2'); //返回两个集合的并集
$redis->sUnion('settest1','settest2'); //将settest1和settest2的并集放到集合settest4中
$redis->sUnionStore('settest4','settest1','settest2'); //返回两个集合的差集
$redis->sDiff('settest1','settest2'); //将settest1和settest2的差集放到集合settset5中
$redis->sDiffStore('settest5','settest1','settest2');
删除
//删除集合中的某个值
$redis->sRem('settest1','aa');
//删除多个值
$redis->sRem('settest1','aa','bb');
//移除集合中一个随机的元素,并返回元素
$redis->sPop('settest1');
sorted set有序集合
Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员.不同的是每个元素都会关联double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序有序集合的成员是唯一的,但分数(score)却可以重复集合中最大的成员数 为2的32次方- 1 (4294967295, 每个集合可存储40多亿个成员)。方法中的z代表有序集合操作。
存储
/*
* 向有序集合ztest中添加一个值,分数值可以是整数值或是双精度浮点数
* 执行zadd时,如果不存在,则创建一个新的有序集合;如果存在再但不是有序集合类型时,返回一个错误
*/
$redis->zAdd('ztest',1,'2019');
$redis->zAdd('ztest',2,'2019'); /*
* 当某元素存在时,更新这个元素的分数,并重新插入该元素,保证元素在正确的位置。
* 但不算新添加的$redis->zadd('ztest', 分数1, 值1, 分数2, 值2);
* 向有序集合插入多个值
*/
$redis->zAdd('ztest',2,'2020',3,'2021',4,'2022'); //指定的值2033 增加2
$redis->zAdd('set',2,'2022');
获取
/*
* 获取指定区间的有序集合,会返回一个数组,分数从小到大
* 第一个参数:有序集合名
* 第二个参数:起始位置
* 第三个参数:结束位置(包含该位置),负数代表倒数第几个
* 第四个参数:可选参数,布尔值,是否带有分数,默认false
*/
// 按分数排序,但是不带分数
$redis->zRange('ztest',0,1); // 按分数排序,并且携带分数
$redis->zRange('ztest',0,1,true); // 获取指定区间的有序集合。返回数组。分数从大到小
$redis->zRevRange('ztest',1,2); // 获取指定元素的分数
$redis->zScore('ztest','2019'); // 获取存储元素的个数
$redis->zCard('ztest'); // 分数介于2-5 的元素的个数
$redis->zCount('ztest',2,5); // 返回分数介于2-3的元素,不带分数,显示方式同zRange
$redis->zRangeByScore('ztest',2,3); // 返回分数介于2-3的元素,并带分数显示,显示方式同zRange
$redis->zRangeByScore('ztest',2,3,['withscore'=>true]);
删除
//删除指定的成员
$redis->zRem('ztest','2019');
//移除分数介于2-3的元素,返回删除的个数
$redis->zRemRangeByScore('ztest',2,3);
(扩充)其他常用到的方法
查找相关key
/*
* 按条件查出对应的key(键),支持字符串拼接 (返回值是一个数组,即使没查出数据也会返回空数组)
* *代表任意字符任意长度, ?任意字符一个长度
* */
// 找出等于A的键
$redis->keys('A'); // 找出以 a 开头,后面为任意值的 键,
$redis->keys('a*'); // 找出链接中间包含 b 的 键
$redis->keys('*b*'); // 找出长度为3,且第一个字符为c的 键$a = a;
$redis->keys('c??'); //使用keys后可以使用for循环加 get() 来获取相关keys对应的值
$redis->keys($a . '*');
设置过期时间
/*
* 查看某个key有效期的剩余时间,返回秒数。
* 当无过期时间时,返回-1
* 当无该key值时,返回-2
*/
$redis->ttl('set');
查看过期时间
/*
* 多少秒后过期
* 到某一个时间戳(秒)的时候过期
*/
$redis->expire('set',120);
Redis实例讲解的更多相关文章
- 实例讲解Springboot以Repository方式整合Redis
1 简介 Redis是高性能的NoSQL数据库,经常作为缓存流行于各大互联网架构中.本文将介绍如何在Springboot中整合Spring Data Redis,使用Repository的方式操作. ...
- 实例讲解Springboot以Template方式整合Redis及序列化问题
1 简介 之前讲过如何通过Docker安装Redis,也讲了Springboot以Repository方式整合Redis,建议阅读后再看本文效果更佳: (1) Docker安装Redis并介绍漂亮的可 ...
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解
笔记 3.SpringBoot2.x整合redis实战讲解 简介:使用springboot-starter整合reids实战 1.官网:https://docs.spring.io/spring-bo ...
- [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)
linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...
- float实例讲解
float实例讲解 float是个强大的属性,在实际前端开发过程中,人们经常拿它来进行布局,但有时,使用的不好,也麻烦多多啊. 比如,现在我们要实现一个两列布局,左边的列,宽度固定:右边的列,宽度自动 ...
- S3C2440上RTC时钟驱动开发实例讲解(转载)
嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤.一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便.如有错误之处,谢请指正. 共享资源,欢迎转载:http:/ ...
- 实例讲解Oracle数据库设置默认表空间问题
实例讲解Oracle数据库设置默认表空间问题 实例讲解Oracle数据库设置默认表空间问题,阅读实例讲解Oracle数据库设置默认表空间问题,DBA们经常会遇到一个这样令人头疼的问题:不知道谁在O ...
- 基于tcpdump实例讲解TCP/IP协议
前言 虽然网络编程的socket大家很多都会操作,但是很多还是不熟悉socket编程中,底层TCP/IP协议的交互过程,本文会一个简单的客户端程序和服务端程序的交互过程,使用tcpdump抓包,实例讲 ...
- makefile基础实例讲解 分类: C/C++ 2015-03-16 10:11 66人阅读 评论(0) 收藏
一.makefile简介 定义:makefile定义了软件开发过程中,项目工程编译链.接接的方法和规则. 产生:由IDE自动生成或者开发者手动书写. 作用:Unix(MAC OS.Solars)和Li ...
随机推荐
- JDK Base64编解码1.7和1.8的坑
场景 对接一个第三方api接口,其中签名部分用的是JDK8的编码.我们线上采用JDK7,导致项目无法编译 替换编解码部分为1.7的代码,然后签名又不对 所以坑就在这里,结论,1.7的编解码有换行符导致 ...
- 从大厂DevOps工具链部署,看现代产品的生命周期管理
目录 1. 认识DevOps 1.1. DevOps工具链 1.2. CI 持续集成(Continuous Integration) 1.3. CD(持续交付 & 持续部署) 1.4. Agi ...
- 如何解决在electron里无法使用puppeteer的evaluate函数
报错如图,只需要注释掉 index.html 含有 http-equiv="Content-Security-Policy 的 meta 标签就可以了.
- [每日一题2020.06.13]leetcode #739 #15 单调栈 双指针查找
739 每日温度 ( 单调栈 ) 题目 : https://leetcode-cn.com/problems/daily-temperatures/ 题意 : 找到数组每一个元素之后第一个大于它的元素 ...
- 浅谈HTTPS和HTTP
1.HTTP和HTTPS的基本概念 HTTP:超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个客户端和服务端请求和应答的标准,用于WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览 ...
- Eplan如何调用经常使用的自绘部件?
Eplan如何调用经常使用的自绘部件?采用宏的简单应用,即可. 参考文档:https://blog.csdn.net/txwtech/article/details/90510106
- Scrapy学习1:安装
Install Scrapy 熟悉PyPI的话,直接一句 pip install Scrapy 但是有时候需要处理安装依赖,不能直接一句命令就安装结束,这个和系统有关. 我用的Ubuntu,这里仅介绍 ...
- Java架构师如何学习?
引言 古人云:"活到老,学到老."互联网算是最辛苦的行业之一,"加班"对工程师来说已是"家常便饭",同时互联网技术又日新月异,很多工程师都疲 ...
- 搜索引擎ElasticSearch入门
前言 最近项目上需要用到搜索引擎,由于之前自己没有了解过,所以整理了一下搜索引擎的相关概念知识. 正文 想查数据就免不了搜索,搜索就离不开搜索引擎,百度.谷歌都是一个非常庞大复杂的搜索引擎,他们几乎索 ...
- JavaWeb网上图书商城完整项目--day02-16.登录功能各层实现
/*1.第一步将用户提交的参数封装成javabean对象 * *2.对提交的参数的进行合法性的校验 * *3.通过用户名和密码去查找得到user对象 *如果user对象为null,说明用户名和密码不正 ...