如果面试问到你redis的常用数据类型,你怎么和面试官聊上十分钟?

编程入门 行业动态 更新时间:2024-10-24 20:22:36

如果面试问到你redis的常用数据类型,<a href=https://www.elefans.com/category/jswz/34/1732045.html style=你怎么和面试官聊上十分钟?"/>

如果面试问到你redis的常用数据类型,你怎么和面试官聊上十分钟?

最近组长把一些简历推到我这边让我帮他面试几份,问到这种基础题目时收到的回答总是不太理想

1、最简单的回答:

Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:

  • 字符串 string
  • 哈希 hash
  • 列表 list
  • 集合 set
  • 有序集合 sorted set / zset

一分钟答完,会让面试官觉得你牛逼吗?这种人人皆知的答案显然不是面试官想要的。

2、每种数据类型的详细解释

一、字符串类型(string)

字符串类型是Redis的最基本类型,它可以存储任何形式的字符串。其它的四种类型都是字符串类型的不同形式。

此类型和memcache相似,作为常规的key-value缓存应用。

注:一个键最大能存储512MB

二:散列类型(hash)

redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象(因为对象可能会包含很多属性)

三:列表类型(list)

内部使用双向链表实现,所以获取越接近两端的元素速度越快,但通过索引访问时会比较慢

四:集合类型(set)

集合类型值具有唯一性,常用操作是向集合添加、删除、判断某个值是否存在,集合内部是使用值为空的散列表实现的。

五:有序集合类型 zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。

redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。


这样就完事了吗?让我们再多卷一下

3、各数据类型的常用命令

String常用命令

命令格式功能案例
set key value将key-value缓存redis中set name dafei
get key从redis中获取key对应value值get name
incr key将key对应value值 + 1incr age
decr key将key对应value值-1decr age
setex key seconds value将key-value缓存到redis中,seconds 秒后失效setex sex 10 man
ttl key查看key存活时间 -1 永久有效,-2 过期了ttl sex
del key从redis中删除keydel name
setnx key value如果key已经存,不做任何操作,如果key不存,直接添加setnx name xiaofei

Hash常用命令

命令格式功能案例
hset key field value将field value对缓存到redis中hash中,键值为keyhset user name dafei
hget key field从key对应hash列表中获取field字段hget user name
hexists key field判断key对应的hash列表是否存在 field字段hexists user age
hdel key field删除key对应hash列表中field字段hdel user age
hincrby key field increment给key对应hash列表中field字段 + incrementhincrby user age 10
hlen key查看key对应的hash列表field的数量hlen user
hkeys key获取key对应的hash列表所有的field值hkeys user
hvals key获取key对应的hash列表所有的field对应的value值kvals user
hgetall key获取key对应的hash列表中所有的field及其对应的value值hgetall user

List常用命令

命令格式功能案例
rpush key value从右边往key集合中添加value值rpush hobby java
lrange key start stop从左边开始列表key集合,从start位置开始,stop位置结束。stop为-1时查全部lrange hobby 0 -1
lpush key value从左边往key集合中添加value值lpush hobby c++
lpop key弹出key集合中最左边的数据lpop hobby
rpop key弹出key集合中最右边的数据rpop hobby
llen key获取列表长度llen hooby

Set集合常用命令

命令格式功能案例
sadd key members […]往key 集合中添加member元素sadd myset a b c
smembers key遍历key集合中所有的元素smembers myset
srem key members […]删除key集合中members元素srem myset a
spop key count从key集合中随机弹出count个元素spop myset 1

zset集合常用命令

命令格式功能案例
zadd key score member往key集合中添加member元素,分数为scorezadd players 100 a
zincrby key increment member将key集合中的member元素 分数 + incrementzincrby players 50 a
zrange key start stop [withscores]将key集合中的元素按分数升序排列 [显式分数]zrange players 0 -1 withscores
zrevrange key start stop [withscores]将key集合中的元素按分数降序排列 [显式分数]zrevrange players 0 -1 withscores
zrank key member返回member元素在key结合中的正序排名zrank players a
zrevrank key member返回member元素在key结合中的倒序排名zrevrank players a
zcard key返回key集合元素个数zcard players

Redis全局命令

命令格式功能案例
keys pattern按照pattern 匹配规则,列表redis中所有的keykeys xxx:*
exists key判断key是否存在exists name
expire key seconds给key设置过期时间,超时:secondsexpire name 10
persist key取消key过期时间persist name
select index切换数据库,默认是第0个,共有【0,15】个select 0
move key db从当前数据库将key移动到指定db库move name 1
randomkey随机返回一个keyrandomkey
rename key newkey将key改名为newkeyrename name newname
echo message打印message信息echo message
dbsize查看key个数dbsize
info查看redis数据库信息info
config get *查看所有redis配置信息config get *
flushdb清空当前数据库flushdb
flushall清空所有数据库flushall

4、举例各数据类型应用场景:

  • 字符串 string :可以用来存储用户的Session信息、缓存数据等。
  • 哈希 hash :适用于存储对象信息,如用户信息、商品信息等。
  • 列表 list :比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现。
  • 集合 set :在微博中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
  • 有序集合 sorted set / zset:游戏排行榜,各种排行榜。

5、Value设计时如何考虑采用哪种数据类型

value值的设计其实就是value类型选用: String, Hash, List, Set, Sort Set

一般考虑:

  • 是否需要排序?要使用Sort Set
  • 缓存的数据是多个值还是单个值,
  • 多个值:允许重复选List 不允许重复选择Set
  • 单个值:简单值选择String, 对象值选择Hash

一种取巧的方式:

  • 是否需要排序?要使用Sort Set
  • 剩下使用String

操作方式:

所有value之后都转换成json格式字符串,然后缓存到Redis,原因:Java操作方便,减少泛型操作麻烦

比如:

List<String>list = ...
Set<String> set = ....
Map<String, Object> map = ....List<Object>  list = Redis对象.getList
Set<Object> set = Redis对象.getSet   
Map<Object, Object> map  =  Redis对象.getMap

不管存放啥数据类型,从reds中获取出来都是Object类型,后续对象强制转换麻烦,干脆直接使用字符串。


如此完善的知识结构,一道简单的面试题就能回答得让面试官对你赞赏有加 ~ THX

更多推荐

如果面试问到你redis的常用数据类型,你怎么和面试官聊上十分钟?

本文发布于:2023-12-05 05:48:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1663277.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:你怎么   到你   十分钟   数据类型   面试官

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!