1.什么是redis?
redis
是一个
高性能的
key-value数据库
,它是完全开源免费的,而且
redis
是一个NOSQL 类型数据库,是为了解决
高并发
、
高扩展
,
大数据存储
等一系列的问题而产生的数据库解 决方案,是一个
非关系型
的数据库。
Redis
的出色之处不仅仅是性能,
Redis
最大的魅力是
支持保存多种数据结构
,此外
单个
value
的最大限制是
1GB
,不像
memcached
只能保存
1MB
的数据,因此
Redis
可以用来实
现很多有用的功能,比方说用他的
List
来做
FIFO
双向链表
,实现一个
轻量级的高性能消息
队列服务
,用他的
Set
可以做
高性能的
tag
系统
等等。另外
Redis
也可以对存入的
Key- Value设置
expire
时间,因此也可以被当作一个功能加强版的memcached
来用。
2.Redis常用的数据结构?
Redis
支持的常用
5
种数据类型指的是 value类型,分别为:
字符串
String
、
列 表List
、
哈希
Hash
集合
Set
、
有序集合 Zset
,但是
Redis
后续又丰富了几种数据 类型分别是Bitmaps
、
HyperLogLogs
、
GEO
。
Redis
底层的数据结构包括:
简单动态数 组SDS
、
链表
、
字典
、
跳跃链表
、
整数集合
、
压缩列表
、
对象
。
Redis
为了
平衡空间和时间效率
,针对 value的具体类型在底层会
采用不同的数 据结构来实现
,其中哈希表和压缩列表 是复用比较多的数据结构
3.Redis有哪些数据类型?
Redis
主要有
5
种数据类型,包括
String
,
List
,
Set
,
Zset
,
Hash
,满足大部分的使用要求
String 二进制安全 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M 做简单的键值对缓存
List 链表(双向链表) 增删快,提供了操作某一段元素的API 1,最新消息排行等功能(比如朋友圈的时间线) 2,消息队列
Set 哈希表实现,元素不重复 1、添加、删除,查找的复杂度都是O(1) 2、为集合提供了求交集、并集、差集等操作 1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐
Zset(有序集合) 将Set中的元素增加一个权重参数score,元素按score有序排列 数据插入集合时,已经进行天然排序 1、排行榜 2、带权重的消息队列
Hash 键值对集合,即编程语言中的Map类型 适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去) 存储、读取、修改用户属性
4.为什么Redis单线程模型效率也能这么高?
1.
C
语言实现,效率高
2. 纯
内存
操作
3. 基于非阻塞的IO
复用模型机制
4. 单线程的话就能
避免多线程的频繁上下文切换
问
5. 丰富的数据结构(全称
采用
hash
结构,读取速度
据存储进行了一些优化
,比如
压缩表
,
跳跃表
等)