SlideShare a Scribd company logo
1 of 17
Redis 2011/2 朱晔 zhuye@5173.com
议题 基本介绍 详细介绍 键值 复制 持久化  VM 使用介绍 键 字符串 列表 集合 有序集合 哈希 发布订阅和事务 其它 应用与展望
基本介绍 Redis – REmoteDItionary Service 实时体验 http://try.redis-db.com/ Remote Data Structure Server String List Set Sorted Set Hash 优点 性能 (简洁的网络层实现/10w+SET/8w+GET) 原子性 (丰富的原子API /单线程) 数据类型 (Big O,不能假设所有操作都是O(1)) 协议简单 缺点 占用大量内存(至少需要所有Key在内存中) 持久化机制需要大量I/O
详细介绍 – 键值 键始终是字符串,值可以是多种数据结构 可以为键设置过期时间 和Memcache比呢? 支持级联的复制 支持持久化(两种方式/可关闭) 支持保存比内存更多的数据 支持值具有多种数据结构 2.1.3之前的限制 不能重新设定易变值的过期时间 修改易变值意味着删除后再执行操作
详细介绍 – 复制 特性 一个主可以有多个从 从还可以有下级的从 初始化的时候,主不阻塞,从阻塞 应用 可伸缩性 – 主用户写,多个从用于读和计算 高性能 – 主不进行持久化,从进行持久化 工作原理 从发出同步请求 主开启后台线程保存当前数据为文件,并记录后续修改请求 主向从传送文件 从保存文件并恢复到内存中 主发送后续修改请求到从 从执行修改一直到同步完成
详细介绍 – 持久化 快照方式 手动调用BKSAVE或者SAVE 通过配置文件配置保存策略 工作原理 创建子进程,父子共享内存 后续修改操作复制新的页 子进程保存内存映像到临时文件 完成后替换原始文件并替换修改的页 Append Only File方式 所有修改操作以日志方式保存在aof文件中 三种保存机制(总是/每秒/依赖操作系统)
详细介绍 – VM 目标:突破内存限制/数据冷热分离 限制:键必须在内存中/在使用前值必须作为一个整体在内存中 配置 vm-max-memory决定了达到多少内存之后换出,换出时优先考虑很久未使用的大对象 vm-pages /vm-page-size页总数和页大小决定了总的swap大小,一个页只能保存一个对象,多则浪费 vm-max-threads决定了换入的方式,0则同步,也就是在换入的时候阻塞其它请求。推荐配置为CPU核数,如果大多数时候不会发生换出则可配置为0获得比较好的整体性能。 注意 在进行快照的时候,不会进行换出,此时内存的使用会增大 swap文件可以配置路径,比较适合在固态硬盘中以及ext3文件系统
使用介绍 – 键 DEL 删除 KEYS按模式查找匹配的键 RENAME 为键重命名 TYPE 获取键值类型 EXISTS 判断键是否存在 MOVE 把键移动到另一个数据库 RENAMENX 重命名仅当新键不存在 EXPIRE 为键设置过期时间 PERSIST 移除键的过期时间 SORT 为列表、集合或有序集合中的元素排序 EXPIREAT 使用UNIX时间戳设置过期时间 RENDOMKEY 随机返回一个键 TTL 获取键的过期时间
使用介绍 – 字符串 APPEND 为键追加一个值 GETRANGE 获取键中字符串的部分 MSET 为多个键设置多个值 SETNX 仅当键不存在的时候设置值 DECR 递减字符串的值 GETSET 设置字符串的值并返回老的值 MSETNX仅当键不存在的时候设置多个键值 SET 设置值 SETRANGE 重新设置字符串的部分内容 DECYBY 减少字符串指定值 INCR 递增字符串的值 STRLEN 获取字符串长度 GET 获取值 INCRBY 增加字符串指定值 SETBIT 设置字符串的一个位 GETBIT 获取字符串的一个位 MGET 获取一组键的值 SETEX 设置值以及过期时间
使用介绍 – 列表 BLPOP 删除并获取列表第一个元素或等待一定时间 LLEN 获取列表长度 LREM 从列表移除元素 RPUSH 追加一个值到列表 BRPOP 从列表删除或获取最后一个元素或等待一定时间 LPOP 从列表删除并获取第一个元素 LSET 通过索引号设置列表中元素的值 RPUSHX 仅在列表存在的时候向其追加值 BRPOPLPUSH 从列表弹出一个值并压入另一个列表并返回,或等待一定时间直到列表可用 LPUSH 加入一个值到列表最前面 LTRIM 把列表裁剪为指定范围 LINDEX 通过索引号从列表获取值 LPUSHX 仅在列表存在的时候把值加入列表最前面 RPOP 从列表中删除最后一个值并且获取 LINSERT 向列表中一个元素的前或后插入值 LRANGE 获取列表中一定范围的值 RPOPLPUSH 从列表移除最后一个值并且把这个值追加到另一个列表最后然后返回值
使用介绍 – 集合 SADD 向集合加入一个成员 SINTER 取两个集合的交集 SMOVE 把成员从一个集合移动到另一个 SUNION 合并两个集合 SCARD 获取集合的大小 SINTERSTORE 取两个集合的交集并且把结果存在另一个集合中 SPOP 从集合删除一个随机成员并返回 SUNIONSTORE 合并两个集合并把结果保存在另一个集合中 SDIFF 取两个集合的差集 SISMEMBER 判断值是否是集合成员 SRANDMEMBER 从集合获取一个随机成员 SDIFFSTORE 取两个集合的差集并把结果保存在另一个集合中 SMEMBERS 获取集合所有成员 SREM 从集合删除成员
使用介绍 – 有序集合 ZADD 为有序集合增加值,如果值存在则更新分数 ZINTERSTORE 获取交集并保存到另一个 ZREM 删除一个成员 ZREVERANGEBYSCORE 获取一定数据量的成员,根据分数的从高到低 ZCARD 获取成员总数 ZRANGE 获取一批成员,根据索引号 ZREMRANGEBYRANK 根据索引号删除一些成员 ZREVRANK 获取成员的索引号,次序根据分数从高到低 ZCOUNT 获取一定分数内的成员数量 ZRANGEBYSCORE 根据分数返回一批成员 ZREMRANGEBYSCORE 删除一定分数内的成员 ZSCORE 获取某个成员的分数 ZINCRBY 增加成员的分数 ZRANK 获取成员的索引 ZREVRANGE 获取一批成员,恩据分数从高到低 ZUNIONSTORE 合并多个集合并保存到另一个
使用介绍 – 哈希 HDEL 删除一个哈希字段 HGETALL 获取哈希的所有字段和值 HLEN 获取哈希中字段的数量 HSET 设置哈希中一个字段的值 HEXISTS 判断哈希是否存在字段 HINCRBY 为哈希的一个自定增加一定的值 HMGET 获取哈希多个字段的值 HSETNX 只有在字段不存在的时候才设置值 HGET 获取哈希字段的值 HKEYS 获取哈希所有的字段 HMSET 为哈希的多个字段设置值 HVALS 获取哈希的所有值
使用介绍 – 发布订阅和事务 PSUBSCRIBE 监听信道发布的符合模式的值 PUNSUBSCRIBE 停止监听信道发布的符合模式的值 UNSUBSCRIBE 停止监听信道 PUBLISH 向信道发送消息 SUBSCRIBE 监听信道的消息 DISCARD 在MULTI后放弃所有命令 MULTI 开始事务块 WATCH 监视值是否变化来决定事务的执行 EXEC 在MULTI后执行所有命令 UNWATCH 放弃所有监视的值
使用介绍 – 其它 AUTH 验证 PING 测试连通性 SELECT 改变当前数据库 ECHO 打印字符串 QUIT 关闭连接 BGREWRITEAOF 异步写AOF文件 DBSIZE 获取数据库的键总数 INFO 获取服务器的状态信息 SLAVEOF 从主订阅数据 BGSAVE 异步写快照 DEBUG OBJECT获取键的调试信息 LASTSAVE 获取上一次成功快照的时间 SYNC 用于复制的内部命令 CONFIG SET 设置配置参数 DEBUG SEGFAULT 让服务器奔溃 MONITOR 监测所有的请求 FLUSHALL 删除所有数据库的所有值 SAVE 同步写快照 CONFIG RESETSTAT  重置INFO返回的信息 FLUSHDB 从当前数据库删除所有值 SHUTDOWN 同步写快照并且关闭服务器 注意: 在使用的时候明确操作的时间复杂度 时间复杂度对于参数的不同可能也不同 在使用的时候明确API支持的版本号
应用与展望 典型应用 具有逻辑的缓存 锁服务 队列服务 发布订阅服务 展望 Redis Cluster 基于Proxy的服务端的集群 更丰富的API,更多的数据结构 改良的VM和持久化实现
提问和解答 谢谢 朱晔 zhuye@5173.com

More Related Content

Featured

Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Featured (20)

AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 

Redis

  • 1. Redis 2011/2 朱晔 zhuye@5173.com
  • 2. 议题 基本介绍 详细介绍 键值 复制 持久化 VM 使用介绍 键 字符串 列表 集合 有序集合 哈希 发布订阅和事务 其它 应用与展望
  • 3. 基本介绍 Redis – REmoteDItionary Service 实时体验 http://try.redis-db.com/ Remote Data Structure Server String List Set Sorted Set Hash 优点 性能 (简洁的网络层实现/10w+SET/8w+GET) 原子性 (丰富的原子API /单线程) 数据类型 (Big O,不能假设所有操作都是O(1)) 协议简单 缺点 占用大量内存(至少需要所有Key在内存中) 持久化机制需要大量I/O
  • 4. 详细介绍 – 键值 键始终是字符串,值可以是多种数据结构 可以为键设置过期时间 和Memcache比呢? 支持级联的复制 支持持久化(两种方式/可关闭) 支持保存比内存更多的数据 支持值具有多种数据结构 2.1.3之前的限制 不能重新设定易变值的过期时间 修改易变值意味着删除后再执行操作
  • 5. 详细介绍 – 复制 特性 一个主可以有多个从 从还可以有下级的从 初始化的时候,主不阻塞,从阻塞 应用 可伸缩性 – 主用户写,多个从用于读和计算 高性能 – 主不进行持久化,从进行持久化 工作原理 从发出同步请求 主开启后台线程保存当前数据为文件,并记录后续修改请求 主向从传送文件 从保存文件并恢复到内存中 主发送后续修改请求到从 从执行修改一直到同步完成
  • 6. 详细介绍 – 持久化 快照方式 手动调用BKSAVE或者SAVE 通过配置文件配置保存策略 工作原理 创建子进程,父子共享内存 后续修改操作复制新的页 子进程保存内存映像到临时文件 完成后替换原始文件并替换修改的页 Append Only File方式 所有修改操作以日志方式保存在aof文件中 三种保存机制(总是/每秒/依赖操作系统)
  • 7. 详细介绍 – VM 目标:突破内存限制/数据冷热分离 限制:键必须在内存中/在使用前值必须作为一个整体在内存中 配置 vm-max-memory决定了达到多少内存之后换出,换出时优先考虑很久未使用的大对象 vm-pages /vm-page-size页总数和页大小决定了总的swap大小,一个页只能保存一个对象,多则浪费 vm-max-threads决定了换入的方式,0则同步,也就是在换入的时候阻塞其它请求。推荐配置为CPU核数,如果大多数时候不会发生换出则可配置为0获得比较好的整体性能。 注意 在进行快照的时候,不会进行换出,此时内存的使用会增大 swap文件可以配置路径,比较适合在固态硬盘中以及ext3文件系统
  • 8. 使用介绍 – 键 DEL 删除 KEYS按模式查找匹配的键 RENAME 为键重命名 TYPE 获取键值类型 EXISTS 判断键是否存在 MOVE 把键移动到另一个数据库 RENAMENX 重命名仅当新键不存在 EXPIRE 为键设置过期时间 PERSIST 移除键的过期时间 SORT 为列表、集合或有序集合中的元素排序 EXPIREAT 使用UNIX时间戳设置过期时间 RENDOMKEY 随机返回一个键 TTL 获取键的过期时间
  • 9. 使用介绍 – 字符串 APPEND 为键追加一个值 GETRANGE 获取键中字符串的部分 MSET 为多个键设置多个值 SETNX 仅当键不存在的时候设置值 DECR 递减字符串的值 GETSET 设置字符串的值并返回老的值 MSETNX仅当键不存在的时候设置多个键值 SET 设置值 SETRANGE 重新设置字符串的部分内容 DECYBY 减少字符串指定值 INCR 递增字符串的值 STRLEN 获取字符串长度 GET 获取值 INCRBY 增加字符串指定值 SETBIT 设置字符串的一个位 GETBIT 获取字符串的一个位 MGET 获取一组键的值 SETEX 设置值以及过期时间
  • 10. 使用介绍 – 列表 BLPOP 删除并获取列表第一个元素或等待一定时间 LLEN 获取列表长度 LREM 从列表移除元素 RPUSH 追加一个值到列表 BRPOP 从列表删除或获取最后一个元素或等待一定时间 LPOP 从列表删除并获取第一个元素 LSET 通过索引号设置列表中元素的值 RPUSHX 仅在列表存在的时候向其追加值 BRPOPLPUSH 从列表弹出一个值并压入另一个列表并返回,或等待一定时间直到列表可用 LPUSH 加入一个值到列表最前面 LTRIM 把列表裁剪为指定范围 LINDEX 通过索引号从列表获取值 LPUSHX 仅在列表存在的时候把值加入列表最前面 RPOP 从列表中删除最后一个值并且获取 LINSERT 向列表中一个元素的前或后插入值 LRANGE 获取列表中一定范围的值 RPOPLPUSH 从列表移除最后一个值并且把这个值追加到另一个列表最后然后返回值
  • 11. 使用介绍 – 集合 SADD 向集合加入一个成员 SINTER 取两个集合的交集 SMOVE 把成员从一个集合移动到另一个 SUNION 合并两个集合 SCARD 获取集合的大小 SINTERSTORE 取两个集合的交集并且把结果存在另一个集合中 SPOP 从集合删除一个随机成员并返回 SUNIONSTORE 合并两个集合并把结果保存在另一个集合中 SDIFF 取两个集合的差集 SISMEMBER 判断值是否是集合成员 SRANDMEMBER 从集合获取一个随机成员 SDIFFSTORE 取两个集合的差集并把结果保存在另一个集合中 SMEMBERS 获取集合所有成员 SREM 从集合删除成员
  • 12. 使用介绍 – 有序集合 ZADD 为有序集合增加值,如果值存在则更新分数 ZINTERSTORE 获取交集并保存到另一个 ZREM 删除一个成员 ZREVERANGEBYSCORE 获取一定数据量的成员,根据分数的从高到低 ZCARD 获取成员总数 ZRANGE 获取一批成员,根据索引号 ZREMRANGEBYRANK 根据索引号删除一些成员 ZREVRANK 获取成员的索引号,次序根据分数从高到低 ZCOUNT 获取一定分数内的成员数量 ZRANGEBYSCORE 根据分数返回一批成员 ZREMRANGEBYSCORE 删除一定分数内的成员 ZSCORE 获取某个成员的分数 ZINCRBY 增加成员的分数 ZRANK 获取成员的索引 ZREVRANGE 获取一批成员,恩据分数从高到低 ZUNIONSTORE 合并多个集合并保存到另一个
  • 13. 使用介绍 – 哈希 HDEL 删除一个哈希字段 HGETALL 获取哈希的所有字段和值 HLEN 获取哈希中字段的数量 HSET 设置哈希中一个字段的值 HEXISTS 判断哈希是否存在字段 HINCRBY 为哈希的一个自定增加一定的值 HMGET 获取哈希多个字段的值 HSETNX 只有在字段不存在的时候才设置值 HGET 获取哈希字段的值 HKEYS 获取哈希所有的字段 HMSET 为哈希的多个字段设置值 HVALS 获取哈希的所有值
  • 14. 使用介绍 – 发布订阅和事务 PSUBSCRIBE 监听信道发布的符合模式的值 PUNSUBSCRIBE 停止监听信道发布的符合模式的值 UNSUBSCRIBE 停止监听信道 PUBLISH 向信道发送消息 SUBSCRIBE 监听信道的消息 DISCARD 在MULTI后放弃所有命令 MULTI 开始事务块 WATCH 监视值是否变化来决定事务的执行 EXEC 在MULTI后执行所有命令 UNWATCH 放弃所有监视的值
  • 15. 使用介绍 – 其它 AUTH 验证 PING 测试连通性 SELECT 改变当前数据库 ECHO 打印字符串 QUIT 关闭连接 BGREWRITEAOF 异步写AOF文件 DBSIZE 获取数据库的键总数 INFO 获取服务器的状态信息 SLAVEOF 从主订阅数据 BGSAVE 异步写快照 DEBUG OBJECT获取键的调试信息 LASTSAVE 获取上一次成功快照的时间 SYNC 用于复制的内部命令 CONFIG SET 设置配置参数 DEBUG SEGFAULT 让服务器奔溃 MONITOR 监测所有的请求 FLUSHALL 删除所有数据库的所有值 SAVE 同步写快照 CONFIG RESETSTAT 重置INFO返回的信息 FLUSHDB 从当前数据库删除所有值 SHUTDOWN 同步写快照并且关闭服务器 注意: 在使用的时候明确操作的时间复杂度 时间复杂度对于参数的不同可能也不同 在使用的时候明确API支持的版本号
  • 16. 应用与展望 典型应用 具有逻辑的缓存 锁服务 队列服务 发布订阅服务 展望 Redis Cluster 基于Proxy的服务端的集群 更丰富的API,更多的数据结构 改良的VM和持久化实现