zoukankan      html  css  js  c++  java
  • 3.redis 都有哪些数据类型?分别在哪些场景下使用比较合适?

    作者:中华石杉

    面试题

    redis 都有哪些数据类型?分别在哪些场景下使用比较合适?

    面试官心理分析

    除非是面试官感觉看你简历,是工作 3 年以内的比较初级的同学,可能对技术没有很深入的研究,面试官才会问这类问题。否则,在宝贵的面试时间里,面试官实在不想多问。

    其实问这个问题,主要有两个原因:

    • 看看你到底有没有全面的了解 redis 有哪些功能,一般怎么来用,啥场景用什么,就怕你别就会最简单的 KV 操作;
    • 看看你在实际项目里都怎么玩儿过 redis。

    要是你回答的不好,没说出几种数据类型,也没说什么场景,你完了,面试官对你印象肯定不好,觉得你平时就是做个简单的 set 和 get。

    面试题剖析

    redis 主要有以下几种数据类型:

    • string
    • hash
    • list
    • set
    • sorted set

    string

    这是最简单的类型,就是普通的 set 和 get,做简单的 KV 缓存。

    set college szu

    hash

    这个是类似 map 的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在 redis 里,然后每次读写缓存的时候,可以就操作 hash 里的某个字段。

    hset person name bingo
    hset person age 20
    hset person id 1
    hget person name
    person = {
        "name": "bingo",
        "age": 20,
        "id": 1
    }

    list

    list 是有序列表,这个可以玩儿出很多花样。

    比如可以通过 list 存储一些列表型的数据结构,类似粉丝列表、文章的评论列表之类的东西。

    比如可以通过 lrange 命令,读取某个闭区间内的元素,可以基于 list 实现分页查询,这个是很棒的一个功能,基于 redis 实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西,性能高,就一页一页走。

    # 0开始位置,-1结束位置,结束位置为-1时,表示列表的最后一个位置,即查看所有。
    lrange mylist 0 -1

    比如可以搞个简单的消息队列,从 list 头怼进去,从 list 尾巴那里弄出来。

    lpush mylist 1
    lpush mylist 2
    lpush mylist 3 4 5
    
    # 1
    rpop mylist

    set

    set 是无序集合,自动去重。

    直接基于 set 将系统里需要去重的数据扔进去,自动就给去重了,如果你需要对一些数据进行快速的全局去重,你当然也可以基于 jvm 内存里的 HashSet 进行去重,但是如果你的某个系统部署在多台机器上呢?得基于 redis 进行全局的 set 去重。

    可以基于 set 玩儿交集、并集、差集的操作,比如交集吧,可以把两个人的粉丝列表整一个交集,看看俩人的共同好友是谁?对吧。

    把两个大 V 的粉丝都放在两个 set 中,对两个 set 做交集。

    #-------操作一个set-------
    # 添加元素
    sadd mySet 1
    
    # 查看全部元素
    smembers mySet
    
    # 判断是否包含某个值
    sismember mySet 3
    
    # 删除某个/些元素
    srem mySet 1
    srem mySet 2 4
    
    # 查看元素个数
    scard mySet
    
    # 随机删除一个元素
    spop mySet
    
    #-------操作多个set-------
    # 将一个set的元素移动到另外一个set
    smove yourSet mySet 2
    
    # 求两set的交集
    sinter yourSet mySet
    
    # 求两set的并集
    sunion yourSet mySet
    
    # 求在yourSet中而不在mySet中的元素
    sdiff yourSet mySet

    sorted set

    sorted set 是排序的 set,去重但可以排序,写进去的时候给一个分数,自动根据分数排序。

    zadd board 85 zhangsan
    zadd board 72 lisi
    zadd board 96 wangwu
    zadd board 63 zhaoliu
    
    # 获取排名前三的用户(默认是升序,所以需要 rev 改为降序)
    zrevrange board 0 3
    
    # 获取某用户的排名
    zrank board zhaoliu
  • 相关阅读:
    poj 3041 Asteroids (最大匹配最小顶点覆盖——匈牙利模板题)
    poj 2060 Taxi Cab Scheme (最小路径覆盖)
    poj 2728 Desert King (最小比例生成树)
    poj 2449 Remmarguts' Date(第K短路问题 Dijkstra+A*)
    poj 3463 Sightseeing( 最短路与次短路)
    研究生flag
    插入排序和堆排序
    根据二叉树的中序遍历和层次遍历还原二叉树
    关于AVL实现的代码记录
    回文数猜想(与6174问题很像)
  • 原文地址:https://www.cnblogs.com/morganlin/p/11979974.html
Copyright © 2011-2022 走看看