PHP实例讲解使用Redis
Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库 , 并提供多种语言的API 。 Redis支持的数据类型有String(字符串),List(列表),Hash(字典),Set(集合),SortedSet(有序集合);Redis默认端口6379 。
【点击领取】150粉丝福利 , 免费获取PHP进阶架构资料1.连接
$redis=newRedis();//实例化$redis->connect('127.0.0.1',6379);//连接$redis->auth('redis密码');//没密码的redis可忽略此步骤2.数据类型2-1string字符串//存储或更改$redis->set('test','aaa');//获取值$redis->get('test');//aaa2-2list列表
方法中的l代表list操作存储
$redis->lpush('list','a');//从左边加入$redis->lpush('list','b');$redis->lpush('list','c');$redis->rpush('list','d');//从右边加入$redis->lset('list',2,'e');//设置或更改列表指定位置的值 , 成功返回1 , 失败返回错误信息删除
$redis->lpop('list');//删除左边第一个$redis->rpop('list');//删除右边第一个//$redis->lrem('list名','值',num);//根据值删除元素 , 第二个参数是要删除的值(值为这个值的元素要被删除),//第三个参数num表示:从哪开始删、删几个 , //num>0从表头往表尾删 , 删除num个结束;//num<0从表尾往表头删 , 删除|num|个;//num=0移除表中所有值为'b'的元素$redis->lrem('list','b',2);获取 , 返回数组
$redis->lrange('list',0,-1);//返回一个数组 。 存储在key中的列表里指定范围的元素 , //第一个参数是列表名//第二个参数是起始位下标 , //第三个是结束位下标(包含结束位元素) 。 //负数代表倒数 , -1代表倒数第一个;//如果起始大于结束返回空 , 结束大于实际长度 , 返回至最后一个元素 。 $redis->lgetrange('list',0,2);//获取列表指定区间的值 , 同上$redis->ltrim('list',0,3);//截取并保留列表指定区间的值 , 其余值删除 。 //成功返回1 , 失败返回错误信息 。 负数代表倒数$redis->lsize('list');//获取列表的长度$redis->lget('list',2)//获取列表指定位置的值$redis->lindex('list',2);//获取列表指定位置的值2-3hash字典
一个string类型的field和value的映射表 , 特别适合用于存储对象 。 每个hash可以存储2的32次方-1键值对(40多亿)hash表相当于redis存储key=>value中的key , 表内容相当于value方法中h代表hash操作存储
//$redis->hset('hash表',key,value);//如果hash表不存在 , 创建一个该hash表 , 如果不存在该key则设置成功 , 返回true , //如果存在 , 则替换掉原来的值 , 返回false , 失败返回false//第一个参数是字典名$redis->hset('hashtest','a','aaa');//返回true$redis->hset('hashtest','a','bbb');//返回false , a的值改为bbb$redis->hset('hashtest','b','bbb');//返回true , 增加b , 值为bb$redis->hmset('hashtest',[1=>1,2=>2,3=>3]);//批量赋值 , $redis->hincrby('hashtest','1',1);//hash表中的key对应的值自增1(整数) , //第一个参数字典名//第二个参数是key名 , //第三个参数是自增的幅度 。 如果表中不存在该key , 则自动添加该key , 并设置值为自增幅度$redis->hincrbyfloat('hashtest','2',1.5);//hash表中key自增获取
$redis->hget('hash表',key);//获取某个key对应的值$redis->hget('hashtest','a');//获取hashtest中a的值$redis->hkeys('hashtest');//获取hash表中的所有的keys(键名) , 返回一个数组$redis->hvals('hashtest');//获取hash表中的所有的values(值) , 顺序随机 , 返回一个数组$redis->hgetall('hashtest');//获取hash表中所有的键值对 , 顺序随机 , 返回一个数组$redis->hlen('hashtest');//获取hash表中key的数量$redis->hmget('hashtest',[1,2,3]);//批量获取多个key对应的value , 第二个参数是keyArr$redis->hexists('hashtest','b');//判断hash表中是否存在该key删除
$redis->hdel('hashtest','a');//删除hash表中的一个key , 成功返回true , //如果表不存在或key不存在返回false2-4set集合
Redis的Set是String类型的无序集合 。 集合成员是唯一的 , 这就意味着集合中不能出现重复的数据 。 集合中最大的成员数为2的32次方-1(4294967295,每个集合可存储40多亿个成员) 。 方法中的s代表set操作添加
//$redis->sadd('set集合','值');//往settest中加入一个值 , 成功 , 返回添加的个数 , 失败返回0 。 //第一个参数是set集合名//第二个参数是往该集合插入新值 , 即:往value中插入新值$redis->sadd('settest','a');//1$redis->sadd('settest','b');//1$redis->sadd('settest','a');//0$redis->sadd('settest',['c','d','e']);//一次添加多个值获取
$redis->smembers('settest');//获取集合中所有的元素$redis->sismember('settest','b');//判断元素是否是set成员$redis->scard('settest');//查看集合中元素的数量$redis->sinter('settest','settest2');//返回两个集合的交集$redis->sinterstore('settest3','settest','settest2');//将settest和settest2的交集放到集合settest3中$redis->sunion('settest','settest2');//返回两个集合的并集$redis->sunionstore('settest4','settest','settest2');//将settest和settest2的并集放到集合settest4中$redis->sdiff('settest','settest2');//返回两个集合的差集$redis->sdiffstore('settest5','settest','settest2');//将settest和settest2的差集放到集合settest5中
删除
$redis->srem('settest','a');//删除集合中的某个值 , $redis->srem('settest','a','b');//删除多个值$redis->spop('settest');//移除集合中一个随机的元素 , 并返回该元素
2-5.sortedset有序集合
Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员 。
不同的是每个元素都会关联一个double类型的分数 。 redis正是通过分数来为集合中的成员进行从小到大的排序 。
有序集合的成员是唯一的,但分数(score)却可以重复 。
集合中最大的成员数为2的32次方-1(4294967295,每个集合可存储40多亿个成员) 。
方法中的z代表有序集合操作
添加或更新
//$redis->zadd('有序集合名',分数,值);//向有序集合ztest中一个值,分数值可以是整数值或双精度浮点数 。 //执行zadd时 , 如果不存在 , 则创建一个新的有序集合;//如果ztest存在但不是有序集类型时 , 返回一个错误 。 $redis->zadd('ztest',1,'a');$redis->zadd('ztest',2,'a');//当某元素存在时 , 更新这个元素的分数 , 并重新插入该元素 , 保证元素在正确的位置 。 //但不算新添加的$redis->zadd('ztest',分数1,值1,分数2,值2);//向有序集合插入多个值$redis->zadd('ztest',2,'b',3,'c',4,'d');$redis->zincrby('set',2,'c');//指定的值c增加2获取
//$redis->zrange('z集合',起始位,结束位,布尔值);//获取指定区间的有序集合 。 返回数组 。 分数从小到大 。 //第一个参数:有序集合名//第二个参数:起始位置 , //第三个参数:结束位置(包含该位置) , 负数代表倒数第几个 , //第四个参数:可选参数 , 布尔值 , 是否带有分数 , 默认false$redis->zrange('ztest',0,1);//['a','b']按分数排序 , 但是不带分数$redis->zrange('ztest',0,1,true);//['a'=>2,'b'=>2]按分数排序 , 并且携带分数['元素'=>'分数']$redis->zrevrange('zset',1,2);//获取指定区间的有序集合 。 返回数组 。 分数从大到小 。 $redis->zscore('ztest','a');//获取指定元素的分数$redis->zcard('zset');//获取存储元素的个数$redis->zcount('zset',2,5);//分数介于2~5的元素的个数$redis->zrangebyscore('zset',2,3);//返回分数介于2~3的元素 , 不带分数,显示方式同zrange$redis->zrangebyscore('zset',2,3,['withscores'=>true]);//返回分数介于2~3的元素 , 并带分数显示 , 显示方式同zrange删除
$redis->zrem('zset','c');//删除指定成员$redis->zremrangebyscore('set',2,3);//移除分数介于2~3的元素 , 返回删除的个数
3.其他常用方法3-1查找相关key//按条件查出对应的key(键) , 支持字符串拼接(返回值是一个数组 , 即使没查出数据也会返回空数组)//*代表任意字符任意长度 , ?任意字符一个长度$redis->keys('A');//找出等于A的那个键$redis->keys('a*');//找出以a开头 , 后面为任意值的键 , $redis->keys('*b*');//找出链接中间包含b的键$redis->keys('c??');//找出长度为3 , 且第一个字符为c的键$a=a;$redis->keys($a.'*');//使用keys后可以使用for循环加get()来获取相关keys对应的值3-2过期时间查看过期时间//$redis->ttl('key名');//查看某个key有效期的剩余时间 , 返回秒数 。 //当无过期时间时 , 返回:-1;//当无该key值时 , 返回-2;$redis->ttl('ttltest');//查看ttltest剩余过期时间设置过期时间
Redis::expire('key',second);//多少秒后过期Redis::expireAt('key',timeStemp);//到某一个时间戳(秒)的时候过期【PHP实例讲解使用Redis】以上就是PHP使用Redis实例讲解的详细内容
推荐阅读
- 野菜馒头新做法, 比花卷包子都松软好吃, 讲解详细, 想不会都难
- 中国红豆酥新做法, 不用烤箱烤, 照样酥脆掉渣, 做法简单讲解详细
- 太空|早安太空·网罗天下|探月工程总设计师吴伟仁讲解探月计划新动向
- 肉夹馍好吃有诀窍,从和面到炖肉详细讲解每一步,在家也能做大厨
- 想吃酱香饼不用买了,教你在家做,讲解详细,学会可以开店了
- 慢性咽炎|重庆弘医堂医院讲解:慢性咽炎的日常护理措施有
- 正宗“剁椒鱼头”做法,步骤讲解很详细,味道太完美
- “舒芙蕾”吃冷的还是热的好?店长再三讲解吃法,却没人愿相信
- 这才是“小炒牛肉”的正宗做法,大厨详细讲解,牛肉鲜嫩不出水
- 肝病|肝病专家汪晓军讲解:肝病治疗不要走进这几点误区。看完可别再犯了!
