Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由Vmware主持。
Redis都有哪些数据类型?分别适用于哪些场景?
除非是面试官看你的简历,感觉你就是一个工作3年以内的、比较初级的一个同学,可能对技术没有很深入的研究,面试官才会问这类问题。
其实问这个问题主要就俩原因:
要是你回答的不好,没说出几种数据类型,也没说什么场景,支支吾吾的你就完了,面试官对你印象肯定不好,觉得你平时就是做个简单的set和get。
看一下这道面试题怎么回答。
(1)string
这是Redis中最基本的类型了,也最常用,没啥可说的,就是普通的set和get,做简单的kv缓存。
(2)hash
这个是类似map的一种结构,一般可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在redis里,然后每次读写缓存的时候,可以就操作hash里的某个字段,而不是把整个对象都拿出来,这样节省了IO操作,效率更高。
使用HSET key field value命令存储一个对象,如我们有一个用户,key=user:id:1
1value={
2 "id": 1,
3 "name": "walking",
4 "age": 24
5}
hash类的数据结构,主要是用来存放一些对象,把一些简单的对象给缓存起来,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。
1value={
2 "id": 1,
3 "name": "walking",
4 "age": 18
5}
HGET user:id:1 age获取用户ID为1的age值。
(3)list
有序列表,这个是可以玩儿出很多花样的。
比如在微博里,有个大v的粉丝,就可以以list的格式放在Redis里去缓存。
key=某大v
value=[zhangsan, lisi, wangwu]
比如可以通过list存储一些列表型的数据结构,类似粉丝列表了、文章的评论列表了之类的东西。
还可以通过lrange命令,从某个元素开始读取多少个元素,还可以基于list实现分页查询,这个很棒的一个功能。基于redis实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西,性能很高,一页一页的走。
比如还可以用来搞个简单的消息队列,从list头塞进去,从list尾巴那里弄出来。
(4)set
set无序集合,可以自动去重。
直接基于set将系统里需要去重的数据扔进去,自动就给去重了,如果你需要对一些数据进行快速的全局去重,你当然也可以基于jvm内存里的HashSet进行去重。但是如果你的某个系统部署在多台机器上呢?就得基于Redis进行全局的set去重了。
当然还可以基于set玩儿交集、并集、差集的操作,比如交集吧,可以把两个人的粉丝列表整一个交集,看看俩人的共同好友是谁?对吧。
把两个大v的粉丝都放在两个set中,对两个set做交集,看到共同关注的人。
(5)sorted set
排序的set,去重但是可以排序,写进去的时候给一个分数,自动根据分数排序,这个可以玩儿很多的花样。这个数据类型的最大的特点是有个分数的概念,可以自定义排序规则。
比如说你要是想根据时间对数据排序,那么可以写入进去的时候用某个时间作为分数,人家自动给你按照时间排序了。
另外,这个数据类型很适合最排行榜这类的功能。
排行榜: 将每个用户以及其对应的分数写入进去命令zadd board score username如
1zadd board 85 Jobs
2zadd board 72 Jerry
3zadd board 96 Walking
4zadd board 62 Tom
接着使用命令zrevrange board start stop,就可以获取排名从start到stop的用户。
使用命令zrank board username,可以看到用户在排行榜里的排名。
如:zrevrange board 0 3获取排名前3的用户
196 Walking
285 Jobs
372 Jerry
查看排名zrank board Tom,返回4
首先,一起来瞄一眼Redis的学习路线图(xmind文件),看看怎么学习比较好
(注意:关于Redis怎么学?如何复习?这一块小编提供了一些学习复习笔记,有需要即可免费分享, 私信 小编 “Redis” 即可!!)
其次,说到复习,一起来看看我自己整理的一份Redis学习笔记
最后,再来看一份Redis常备的面试题...
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
¥299.00
¥399.00
¥699.00
¥399.00