厦门大学数据库实验室
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
30
安装运行
redis下载:
31
安装运行
Redis安装: 1、解压:tar xzvf redis-stable.tar.gz 2、进入目录:cd redis-stable 3、编译:make 4、安装:make install
32
安装运行
Redis服务器启动:
33
安装运行
Redis客户端启动:
字符串操作:
7
跳跃链表
Skiplist跳跃链表的定义:
8
跳跃链表
9
跳跃链表
header
Tail
Level 3
Length 7
-1
-1
7
-1
7
21
37
21
37
71
14
21
32
37
71
85
10
跳跃链表
header
Tail
Level 3
Length 8
-1
-1
7
-1
7
21
35
37
21
35
37
71
14
24
应用场景
2、特定时间内的特定项目
另一项对于其他数据库很难,但Redis做起来却轻而易举的事 就是统计在某段特点时间里有多少特定用户访问了某个特定资源。 比如我想要知道某些特定的注册用户或IP地址,他们到底有多少访 问了某篇文章。
25
应用场景
Redis解决之道:
每次我获得一次新的页面浏览时我只需要这样做: SADD page:day1:<page_id> <user_id> 当然你可能想用unix时间替换day1,比如time()-(time()%3600*24)等等。 想知道特定用户的数量吗?只需要使用SCARD page:day1:<page_id>。 需要测试某个特定用户是否访问了这个页面?SISMEMBER page:day1:<page_id>。
21
32
35
37
71
85
11
跳跃链表
12
字典
3
Dict字典的定义:
1
4 2
13
字典
图解Dict:
14
字典
字典操作:
15
对象
redisObject的定义:
16
对象
redisObject图解:
17
Redis执行流程:
Redis事件:1、定时事件 2、超时事件 3、套接字读事件 4、套接字写事件
过渡页
0
目录
1
Redis简介
2
Redis数据模型
3
Redis应用场景
4
Redis安装运行
Redis简介
1 Remote Dictionary Server(Redis),即远程字典服务器 2 Redis是一个开源的,ANSI C语言编写,支持网络,基
于内存亦可持久化的日志型的,Key-Value数据库 3 作者:Salvatore Sanfilippo,来自意大利西西里岛,
18
Redis执行流程:
当客户端发起一个连接时:
19
Redis执行流程:
客户端服务器模型:
20
Redis执行流程:
21
R
应用场景
1、排行榜相关
一个很普遍的需求是各种数据库的数据并非存储在内存中,因此在按得分排 序以及实时更新这些几乎每秒钟都需要更新的功能上数据库的性能不够理想。
2
数据类型
sds
3
数据类型
4
sds动态字符串
Sds动态字符串的定义:
5
Sds动态字符串
图解sds:
int len
int free
char buf[6]
0 0 0 6 0 0 0 0 ‘h’‘e’‘l’ ‘l’ ‘o’‘0’
struct sdshdr sds.c文件:
sds s
6
Sds动态字符串
原始解决办法: 普通采用memcache+Mysql的解决方案,当调用id合法的情况下
,可支撑较大的吞吐。但当调用id不可控,有较多垃圾用户调用时,由 于memcache未有命中,会大量的穿透至Mysql服务器,瞬间造成连接 数疯长,整体吞吐量降低,响应时间变慢。
29
应用场景
Redis解决问题:
这里我们可以用redis记录全量的 用户判定信息,如string key:uid int:type,做一次反向的cache,当用 户在redis快速获取自己等级等信息后 ,再去Mc+Mysql层去获取全量信息。 如图:
典型的比如那些在线游戏的排行榜,比如一个Facebook的游戏,根据 得分你通常想要:
- 列出前100名高分选手 - 列出某用户当前的全球排名
23
应用场景
Redis解决之道:
模式是这样的,每次获得新得分时,我们用这样的代码: ZADD leaderboard <score> <username>
得到前100名高分用户很简单:ZREVRANGE leaderboard 0 99。 用户的全球排名也相似,只需要:ZRANK leaderboard <username>。
26
应用场景
新浪微博:史上最大的Redis集群
27
应用场景
技术需求: 面对微博常常出现的热点,如最近出现了较为火爆的短链,短
时间有数以万计的人点击、跳转,而这里会常常涌现一些需求,比 如我们向快速在跳转时判定用户等级,是否有一些账号绑定,性别 爱好什么的,已给其展示不同的内容或者信息。
28
应用场景
任职于Pivotal
4 从2010年3月15日起,Redis的开发工作由VMware主持。 从2013年5月开始,Redis的开发由Pivotal赞助。
1
数据类型 Redis支持5中数据类型:
1 字符串对象(string) 2 列表对象(list) 3 哈希对象(hash) 4 集合对象(set) 5 有序集合对象(zset)
34
谢谢
安装运行
redis下载:
31
安装运行
Redis安装: 1、解压:tar xzvf redis-stable.tar.gz 2、进入目录:cd redis-stable 3、编译:make 4、安装:make install
32
安装运行
Redis服务器启动:
33
安装运行
Redis客户端启动:
字符串操作:
7
跳跃链表
Skiplist跳跃链表的定义:
8
跳跃链表
9
跳跃链表
header
Tail
Level 3
Length 7
-1
-1
7
-1
7
21
37
21
37
71
14
21
32
37
71
85
10
跳跃链表
header
Tail
Level 3
Length 8
-1
-1
7
-1
7
21
35
37
21
35
37
71
14
24
应用场景
2、特定时间内的特定项目
另一项对于其他数据库很难,但Redis做起来却轻而易举的事 就是统计在某段特点时间里有多少特定用户访问了某个特定资源。 比如我想要知道某些特定的注册用户或IP地址,他们到底有多少访 问了某篇文章。
25
应用场景
Redis解决之道:
每次我获得一次新的页面浏览时我只需要这样做: SADD page:day1:<page_id> <user_id> 当然你可能想用unix时间替换day1,比如time()-(time()%3600*24)等等。 想知道特定用户的数量吗?只需要使用SCARD page:day1:<page_id>。 需要测试某个特定用户是否访问了这个页面?SISMEMBER page:day1:<page_id>。
21
32
35
37
71
85
11
跳跃链表
12
字典
3
Dict字典的定义:
1
4 2
13
字典
图解Dict:
14
字典
字典操作:
15
对象
redisObject的定义:
16
对象
redisObject图解:
17
Redis执行流程:
Redis事件:1、定时事件 2、超时事件 3、套接字读事件 4、套接字写事件
过渡页
0
目录
1
Redis简介
2
Redis数据模型
3
Redis应用场景
4
Redis安装运行
Redis简介
1 Remote Dictionary Server(Redis),即远程字典服务器 2 Redis是一个开源的,ANSI C语言编写,支持网络,基
于内存亦可持久化的日志型的,Key-Value数据库 3 作者:Salvatore Sanfilippo,来自意大利西西里岛,
18
Redis执行流程:
当客户端发起一个连接时:
19
Redis执行流程:
客户端服务器模型:
20
Redis执行流程:
21
R
应用场景
1、排行榜相关
一个很普遍的需求是各种数据库的数据并非存储在内存中,因此在按得分排 序以及实时更新这些几乎每秒钟都需要更新的功能上数据库的性能不够理想。
2
数据类型
sds
3
数据类型
4
sds动态字符串
Sds动态字符串的定义:
5
Sds动态字符串
图解sds:
int len
int free
char buf[6]
0 0 0 6 0 0 0 0 ‘h’‘e’‘l’ ‘l’ ‘o’‘0’
struct sdshdr sds.c文件:
sds s
6
Sds动态字符串
原始解决办法: 普通采用memcache+Mysql的解决方案,当调用id合法的情况下
,可支撑较大的吞吐。但当调用id不可控,有较多垃圾用户调用时,由 于memcache未有命中,会大量的穿透至Mysql服务器,瞬间造成连接 数疯长,整体吞吐量降低,响应时间变慢。
29
应用场景
Redis解决问题:
这里我们可以用redis记录全量的 用户判定信息,如string key:uid int:type,做一次反向的cache,当用 户在redis快速获取自己等级等信息后 ,再去Mc+Mysql层去获取全量信息。 如图:
典型的比如那些在线游戏的排行榜,比如一个Facebook的游戏,根据 得分你通常想要:
- 列出前100名高分选手 - 列出某用户当前的全球排名
23
应用场景
Redis解决之道:
模式是这样的,每次获得新得分时,我们用这样的代码: ZADD leaderboard <score> <username>
得到前100名高分用户很简单:ZREVRANGE leaderboard 0 99。 用户的全球排名也相似,只需要:ZRANK leaderboard <username>。
26
应用场景
新浪微博:史上最大的Redis集群
27
应用场景
技术需求: 面对微博常常出现的热点,如最近出现了较为火爆的短链,短
时间有数以万计的人点击、跳转,而这里会常常涌现一些需求,比 如我们向快速在跳转时判定用户等级,是否有一些账号绑定,性别 爱好什么的,已给其展示不同的内容或者信息。
28
应用场景
任职于Pivotal
4 从2010年3月15日起,Redis的开发工作由VMware主持。 从2013年5月开始,Redis的开发由Pivotal赞助。
1
数据类型 Redis支持5中数据类型:
1 字符串对象(string) 2 列表对象(list) 3 哈希对象(hash) 4 集合对象(set) 5 有序集合对象(zset)
34
谢谢