Redis

数据类型:5种 String,List,Set,Hash,SortedSet

1)String:set  name "zhoujin" 也可以是int类型 set count 1,自增incr count

用途:提及用户访问网站的次数set userId20200310 1,由于Redis的操作是原子性的,不需要考虑并发问题

2)Hash:hmset zhoujin name "zhoujin" age "25" title "java"

hget zhoujin age --->返回25

用途:多用于存储对象

3)List:lpush myList aaa lpush myList bbb lpush ccc

lrange myList 0 10

用途:可以用作栈,最新消息排行榜

4)set:sadd mySet 111 sadd mySet 222  sadd mySet 222

smembers mySet

用途:由于set有很好的交并补的操作,课用作微博 粉丝之间的共同关注,共同喜好

5)sortedSet:zadd myzset 3 aaa

3:代表分数,aaa要存贮的值

用途:存储全班分数,排序

海量数据查询key

redis中keys和scan的对比

两者都是用来返回key的,但是使用场景和方法不同。

一、keys
KEYS pattern
比如:
    keys *
    keys user_info:*

特点:
1、在选定的库中,一次性全部返回符合条件的key,如果数据量很大将会等待很久,
因此,只适合用在可控的量小的键查询,比如几百,几千。
2、返回的键精确,不会重复,可放心使用。

二、scan
SCAN cursor [MATCH pattern] [COUNT count]

cursor:查询游标,第一次0,后面就是使用返回数组中第一个值,当返回的值为0时则表示遍历完毕。

MATCH pattern:匹配一个表达式,同上,选填。

[COUNT count]:指定每次迭代返回元素的最大值的一种提示(默认值为 10),但是在大多数情况下,
    这种提示都是有效的,因此,返回的个数在count左右。

示例:
scan 0 MATCH user_info:* COUNT 10
返回:
1)  "6"
2)  1)   "user_info:85:1114850"
    2)   "user_info:88:1114880"
    3)   "user_info:16:1081160"
    4)   "user_info:84:1114840"
    5)   "user_info:77:1114770"
    6)   "user_info:83:1114830"
    7)   "user_info:79:1114790"
    8)   "user_info:74:1114740"
    9)   "user_info:72:1114720"
    10)   "user_info:69:1114690"
    11)   "user_info:86:1114860"
    12)   "user_info:78:1114780"


特点:
1、随机性较高,没有规律。
2、唯一能判断遍历结束的标志就是返回结果集的第一个元素,示例中的6,游标只是一个标识,不可比较,
    下次返回的游标可能比现在大或者小,但是只要等于0就确定结束了。
3、返回的列表存在重复的情况,需要应用程序自己处理。
4、由于全部遍历完需要一点时间,如果过程中键被操作了,那么影响未知。
5、返回的数量没有确定的数量


在数量未知或者数量较大的情况下使用scan遍历来获取所有的key

$cursor = 0;
$keys_arr = [];
while(true){
    $re = $redis->scan($cursor, 'user_info:*', 10);// 仅表示示例
    if($re && is_array($re)){
        if($re[2] && is_array($re[2])){
            // 加入$keys_arr
        }
        if($re[1] == 0){
            break; // end
        }else{
            $cursor = $re[1];
        }
    }else{
        break;// 报错
    }
}

// 排重
$keys_arr = array_unique($keys_arr);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值