NullPointer 发表于 2016-11-26 21:34

面试Java被问到Redis数据结构的几个面试题

Redis数据结构的面试题答案下面几乎可以涵盖。
时间复杂度的话去官网看下,每个命令的时间复杂度官网都给出了。

1、Redis的五种数据类型
字符串string:字符串类型是Redis中最为基础的数据存储类型,是一个由字节组成的序列,他在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据货Json对象描述信息等,是标准的key-value,一般来存字符串,整数和浮点数。Value最多可以容纳的数据长度为512MB
应用场景:很常见的场景用于统计网站访问数量,当前在线人数等。incr命令(++操作)

列表list:Redis的列表允许用户从序列的两端推入或者弹出元素,列表由多个字符串值组成的有序可重复的序列,是链表结构。好比Java的linkedList,在往两端插入和删除数据时,效率是非常高的,往中间插入数据效率是很低下的。List中可以包含的最大元素数量是4294967295。
应用场景:1.最新消息排行榜。2.消息队列,以完成多程序之间的消息交换。可以用push操作将任务存在list中(生产者),然后线程在用pop操作将任务取出进行执行。(消费者)

集合set:Redis的集合是无序不可重复的,和列表一样,在执行插入和删除和判断是否存在某元素时,效率是很高的。集合最大的优势在于可以进行交集并集差集操作。Set可包含的最大元素数量是4294967295。
应用场景:1.利用交集求共同好友。2.利用唯一性,可以统计访问网站的所有独立IP。3.好友推荐的时候根据tag求交集,大于某个threshold(临界值的)就可以推荐。

散列hash:Redis中的散列可以看成具有String key和String value的map容器,可以将多个key-value存储到一个key中。每一个Hash可以存储4294967295个键值对。
应用场景:例如存储、读取、修改用户属性(name,age,pwd等)

有序集合zset:和set很像,都是字符串的集合,都不允许重复的成员出现在一个set中。他们之间差别在于有序集合中每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。尽管有序集合中的成员必须是卫衣的,但是分数(score)却可以重复。
应用场景:可以用于一个大型在线游戏的积分排行榜,每当玩家的分数发生变化时,可以执行zadd更新玩家分数(score),此后在通过zrange获取几分top ten的用户信息。

ytx750 发表于 2016-11-26 23:09

很多朋友反映,说NoSQLFan上的资料不少,但是要找到自己实用的太难,于是萌生做这样一个专题的想法。通过将不同NoSQL产品从入门到精通的各种资料进行汇总,希望能够让大家更快的找到适合自己的教程或文章进行阅读。

本篇为Redis部分的资料汇总。保持持续更新。

1.Redis是什么?
•十五分钟介绍 Redis数据结构http://bbs.chinaunix.net/thread-3672088-1-3.html
•Redis系统性介绍http://blog.nosqlfan.com/html/3139.html?ref=rediszt
•一个很棒的Redis介绍PPThttp://bbs.chinaunix.net/thread-3672705-1-1.html
•强烈推荐!非同一般的Redis介绍http://bbs.chinaunix.net/thread-3672707-1-1.html
•Redis之七种武器http://bbs.chinaunix.net/thread-3672093-1-3.html
•锋利的Redishttp://bbs.chinaunix.net/thread-3672094-1-3.html

•redis 适用场景与实现http://bbs.chinaunix.net/thread-3672708-1-1.html
2.Redis内部实现

•Redis源码分析系列文章http://bbs.chinaunix.net/thread-3672095-1-3.html
•深入Redis内部-Redis 源码讲解http://bbs.chinaunix.net/thread-3672097-1-3.html
•redis源码分析-如何rehashhttp://bbs.chinaunix.net/thread-3672522-1-3.html

•Redis源码分析-内存分配http://bbs.chinaunix.net/thread-3672525-1-3.html
•深入Redis内部-Redis GET、SET 操作过程http://bbs.chinaunix.net/thread-3672527-1-3.html
•Redis深入浅出-Redis内部结构图解PPThttp://bbs.chinaunix.net/thread-3672528-1-3.html
•深入理解Redis内部实现http://bbs.chinaunix.net/thread-3672529-1-3.html
•Redis zipmap内存布局分析•Redis内存存储结构分析http://bbs.chinaunix.net/thread-3672533-1-3.html
•Redis2.4 backgroud thread•Redis2.4版的自动bgrewriteaofhttp://bbs.chinaunix.net/thread-3672536-1-3.html
•Redis集群功能说明http://bbs.chinaunix.net/thread-3672537-1-3.html
•Redis进阶教程-aof(append only file)日志文件http://bbs.chinaunix.net/thread-3672538-1-3.html
•内存是新的硬盘之Redis存储http://bbs.chinaunix.net/thread-3672540-1-3.html
•Redis String类型实现原理•Redis事件驱动库结构http://bbs.chinaunix.net/thread-3672542-1-3.html
•Redis SPOP不随机的问题http://bbs.chinaunix.net/thread-3672543-1-3.html
•听 antirez 讲 Redis Clusterhttp://bbs.chinaunix.net/thread-3672548-1-3.html
•Redis几个认识误区http://bbs.chinaunix.net/thread-3672549-1-3.html
3.Redis应用、优化及运维
•Redis运维之道(视频+PPT)http://bbs.chinaunix.net/thread-3672551-1-3.html
•使用Redis bitmap进行活跃用户统计http://bbs.chinaunix.net/thread-3672553-1-3.html
•Redis采用不同内存分配器碎片率对比http://bbs.chinaunix.net/thread-3672554-1-3.html
•Redis优化之网络延迟http://bbs.chinaunix.net/thread-3672555-1-3.html
•Redis 数据库结构设计http://bbs.chinaunix.net/thread-3672556-1-3.html
•利用Redis构建高效的实时搜索http://bbs.chinaunix.net/thread-3672557-1-3.html
•Redis内存容量的预估和优化http://bbs.chinaunix.net/thread-3672559-1-3.html
•节约内存:Instagram的Redis实践http://bbs.chinaunix.net/thread-3672560-1-3.html
•Bump的Redis应用经验http://bbs.chinaunix.net/thread-3672561-1-3.html
•Wooga的Redis迁移经验http://bbs.chinaunix.net/thread-3672562-1-2.html
•新浪微博开放平台Redis实践http://bbs.chinaunix.net/thread-3672563-1-2.html
•RedBridge: 为Redis提供HTTP API及连接池功能http://bbs.chinaunix.net/thread-3672565-1-2.html
•基于位置的实时游戏MapAttack的技术实现http://bbs.chinaunix.net/thread-3672566-1-2.html
•使用Cacti监控MongoDB和Redishttp://bbs.chinaunix.net/thread-3672568-1-2.html
•Redis复制与可扩展集群搭建http://bbs.chinaunix.net/thread-3672569-1-2.html
•Redis + PHP 最佳实践!http://bbs.chinaunix.net/thread-3672570-1-2.html
•Redis应用案例,查找某个值的范围http://bbs.chinaunix.net/thread-3672571-1-2.html
•yCon2011 PPT分享:Redis与Pythonhttp://bbs.chinaunix.net/thread-3672572-1-2.html
•浅谈Redis数据库的键值设计http://bbs.chinaunix.net/thread-3672573-1-2.html
•案例:用Redis来存储关注关系http://bbs.chinaunix.net/thread-3672574-1-2.html
•用Redis存储好友关系-python版http://bbs.chinaunix.net/thread-3672575-1-2.html
•WebSockets+Redis构建EventMachinehttp://bbs.chinaunix.net/thread-3672576-1-2.html
•django-redis-cache:用Redis作django的缓存层

•Reds:一个Redis加Node.js的全文搜索引擎http://bbs.chinaunix.net/thread-3672578-1-2.html
•phpRedisAdmin:Redis的WEB界面管理工具http://bbs.chinaunix.net/thread-3672579-1-2.html
•redis_warp、redis_graph、redis_queue - Python下的Redis二次开发•一个适用于CentOS下的Redis启动脚本http://bbs.chinaunix.net/thread-3672581-1-2.html
•OOREDIS:一个Pythonic的Redis库http://bbs.chinaunix.net/thread-3672582-1-2.html
•Redis 运维实际经验纪录之一http://bbs.chinaunix.net/thread-3672583-1-2.html
•小文件存储的方案对比:nginx、Redis、Moosefs•快速构建实时抓取集群http://bbs.chinaunix.net/thread-3672586-1-2.html
•游戏公司wooga的Redis架构变迁http://bbs.chinaunix.net/thread-3672587-1-2.html
•Redis作者谈Redis应用场景http://bbs.chinaunix.net/thread-3672588-1-2.html
•Instagram的实时图片Demo:Node.js, Redis 加 Web Socketshttp://bbs.chinaunix.net/thread-3672589-1-2.html
•用Redis构建访问频率控制模块http://bbs.chinaunix.net/thread-3672590-1-2.html
•Redis-Sampler:深入了解你的Redis存储http://bbs.chinaunix.net/thread-3672591-1-2.html
•Redis实现MongoDB的getlasterror功能http://bbs.chinaunix.net/thread-3672592-1-2.html
•Redis在.NET上的应用教程http://bbs.chinaunix.net/thread-3672596-1-2.html
•Facebook游戏开发商wooga的架构:基于MySQL和Redis http://bbs.chinaunix.net/thread-3672598-1-2.html
•How Digg is Built:讲述Digg背后的技术http://bbs.chinaunix.net/thread-3672599-1-2.html
•redisfs – Redis+FUSE 构建的文件系统http://bbs.chinaunix.net/thread-3672600-1-2.html[/url
•foursquare 的数据分析系统(Hadoop+Hive+Redis+MongoDB)http://bbs.chinaunix.net/thread-3672603-1-1.html
•redis-sharding – 一个 Redis Proxyhttp://bbs.chinaunix.net/thread-3672604-1-1.html
•Digg 采用Redis作计数存储http://bbs.chinaunix.net/thread-3672606-1-1.html
•Redis容量及使用规划http://bbs.chinaunix.net/thread-3672608-1-1.html
•Webdis – 为 Redis 提供 HTTP 接口http://bbs.chinaunix.net/thread-3672610-1-1.html
•实现你自己的 Bloom-Filterhttp://bbs.chinaunix.net/thread-3672611-1-1.html
•Redis、MongoDB在Amazon云服务中的应用http://bbs.chinaunix.net/thread-3672613-1-1.html
•Redissql 用SQL语法玩弄你的Redishttp://bbs.chinaunix.net/thread-3672614-1-1.html
•Redis Pipelining功能介绍http://bbs.chinaunix.net/thread-3672615-1-1.html
•Redis Web界面管理工具http://bbs.chinaunix.net/thread-3672619-1-1.html
•RestMQ:基于Redis的HTTP队列系统http://bbs.chinaunix.net/thread-3672621-1-1.html
•用Redis存储大量数据http://bbs.chinaunix.net/thread-3672622-1-1.html
•一个Redis的.NET客户端http://bbs.chinaunix.net/thread-3672625-1-1.html
4.Redis发展现状及展望
•Redis2.6新功能预告:aof性能提升http://bbs.chinaunix.net/thread-3672607-1-1.html
•Redis作者拒绝微软的Windows补丁http://bbs.chinaunix.net/thread-3672609-1-1.html
•Redis短期发展规划http://bbs.chinaunix.net/thread-3672612-1-1.html
•Redis作者详谈2.4版本改进http://bbs.chinaunix.net/thread-3672616-1-1.html
•Redis 测试引擎将升级提速http://bbs.chinaunix.net/thread-3672618-1-1.html
•Redis新分支,进行服务端lua脚本支持的开发http://bbs.chinaunix.net/thread-3672620-1-1.html
•antirez 的Redis 宣言!http://bbs.chinaunix.net/thread-3672627-1-1.html
•Redis 或弃用当前 VM 机制,采用新的 diskstore 模型http://bbs.chinaunix.net/thread-3672630-1-1.html
•Redis数据库?-Redis的Virtual Memory介绍http://bbs.chinaunix.net/thread-3672629-1-1.html
•Redis增加对UDP的支持http://bbs.chinaunix.net/thread-3672631-1-1.html
•Redis完成Pub/Sub功能开发http://bbs.chinaunix.net/thread-3672632-1-1.html
5.相关新闻
•Redis4You:Redis云存储服务•REDIS TO GO:一个Redis存储服务http://bbs.chinaunix.net/thread-3672594-1-2.html
•lodis:一个JavaScript实现的本地Redis存储http://bbs.chinaunix.net/thread-3672595-1-2.html
•Redis命令参考中文版翻译http://bbs.chinaunix.net/thread-3672597-1-2.html
•6379-为何Redis选择它作为默认端口号?http://bbs.chinaunix.net/thread-3672601-1-1.html
•Cinderella 提供对MongoDB、Redis的支持http://bbs.chinaunix.net/thread-3672602-1-1.html
•Redis的丑兄弟-Bigdis简介http://bbs.chinaunix.net/thread-3672605-1-1.html

javaLP 发表于 2016-11-26 23:46

list说错了list毫无疑问在redis里面采用双向链表 ,内存为不连续,每个node具有pre与next指针指向前节点与后节点因此无论你从那个位置插入元素只需要改变指针所以没有楼主说的前后插入方便中间复杂度高   这里感觉楼主的数据结构有些薄弱再次redis的5种基本类型String list hashsetzset应该是脱口而出重点应该放在集群 例如主从一致容灾

记住了解数据结构 时间复杂度 绝不是死记硬背

gtbyang 发表于 2016-11-26 22:58

貌似做大数据的用来存储消息队列也会涉及

javaLP 发表于 2016-11-26 23:48

gtbyang 发表于 2016-11-26 22:58
貌似做大数据的用来存储消息队列也会涉及

一般做缓存消息队列 使用的少

Danielzero 发表于 2016-11-26 23:56

支持下楼主,长长见识

woshiyjjwudi 发表于 2016-11-27 01:05

厉害了,膜拜,我就一潜水

逝晓风 发表于 2016-11-27 01:35

过来学知识了

post927 发表于 2016-11-27 02:15

楼主请收下 我的膝盖,哈哈

NullPointer 发表于 2016-11-27 12:12

javaLP 发表于 2016-11-26 23:46
list说错了list毫无疑问在redis里面采用双向链表 ,内存为不连续,每个node具有pre与next指针指向前 ...

学习了,
页: [1] 2
查看完整版本: 面试Java被问到Redis数据结构的几个面试题