Redis实例讲解

Stella981
• 阅读 841

简介

  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);
点赞
收藏
评论区
推荐文章
把帆帆喂饱 把帆帆喂饱
1年前
Redis入门
Redis1、Redis概述Redis介绍Redis是一个开源的keyvalue存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset–有序集合)和
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Django 之redis的应用
redis概述redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string,list列表队列和栈,set集合,sortedset有序集合,hash(hash表))
Stella981 Stella981
3年前
Redis!
概述Redis是一个KeyValue存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原
Stella981 Stella981
3年前
Redis安装与配置问题
Redis是一个keyvalue存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基
Stella981 Stella981
3年前
Redis常用命令
Redis常用命令Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sortedset:有序集合)等https://gitee.com/nmwork/RedisUtil(https://gitee.com/nmwork/RedisUtil)1.  Redis数
Stella981 Stella981
3年前
Redis(一) String类型操作【存字符串、存数字】
什么是redis?  redis是一个keyvalue存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更
Stella981 Stella981
3年前
Redis的安装配置和使用
  现在我来讲解一下Redis的安装和配置,那么什么是Redis呢?他的作用是什么呢?  redis是一个keyvalue存储系统,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset有序集合)和hash(哈希类型)。这些数据类型都支持push/
Stella981 Stella981
3年前
Redis为什么这么快
Redis简介Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件它支持多种类型的数据结构,如字符串(String),散列(Hash),列表(List),集合(Set),有序集合(SortedSet或者是ZSet)与范围查询,Bitmaps,Hyperloglogs和
3A网络 3A网络
2年前
Redis 存储对象信息是用 Hash 还是 String
Redis存储对象信息是用Hash还是StringRedis内部使用一个RedisObject对象来表示所有的key和value,RedisObject中的type,则是代表一个value对象具体是何种数据类型,它包含字符串(String)、链表(List)、哈希结构(Hash)、集合(Set)、有序集合(Sortedset)。