redies应用场景
- 格式:docx
- 大小:852.11 KB
- 文档页数:27
redis的应用场景Redis是一个高性能的键值对存储系统,因为它拥有非常高的性能和可靠性,因此在许多不同的应用场景中都得到了广泛的应用。
下面是一些Redis应用场景的具体介绍。
1. 缓存服务Redis最常用的场景就是缓存服务,在Web应用中,通常需要频繁地读取数据库内容,而从数据库中读取数据较慢,因此,将数据缓存到Redis中可以大大提高数据的读取速度。
Redis的缓存服务不仅快速,而且可靠,可以有效避免出现大量的请求导致服务器宕机或响应延迟的情况。
2. 计数器Redis的计数器功能非常实用,它可以用来实现概率算法,比如统计用户的访问次数或者某个广告的点击次数等,统计方式可以根据实际业务需求来自定义。
3. 分布式锁Redis还可以用来实现分布式锁,通常的分布式锁实现方式是在数据库中的记录上加锁,但是这种方式会让请求变慢,因此使用Redis存储分布式锁会更快。
4. 数据存储Redis还可以用来存储数据,它支持多种数据类型,比如字符串、哈希表、列表、集合、有序集合等。
因为Redis的性能非常高,因此它可以用来保存应用程序中的一些常用的数据,也可以用来存储进程间的数据等。
5. 消息队列Redis还可以用来实现消息队列,比如在异步任务的处理中,可以将任务数据先放入Redis中,供后续的处理程序异步获取,以避免出现任务堆积等问题。
6. 实时系统在某些实时系统中,如广告系统,Redis的实时性十分重要,它可以快速地存储和查询实时数据,如点击次数、曝光次数等,从而使实时系统的效率和准确性得到更好的保障。
7. 应用状态存储Redis还可以用于存储应用状态,比如在线用户状态、用户购物车状态等,这些状态存在于应用程序内存中,可以随时被访问。
综上所述,Redis拥有非常强的性能和可靠性,能够满足各种不同应用场景的需求,基于Redis处理的应用程序通常具有速度快、可靠性高、性能稳定等优点,因此Redis广泛应用于缓存服务、分布式锁、数据存储、消息队列、实时系统、状态存储等多个领域。
redis 常用应用场景Redis 是一款高性能的键值存储系统,常用于解决各种应用场景下的性能瓶颈问题。
本文将介绍Redis 常用的应用场景,包括缓存、消息队列、计数器、排行榜、分布式锁等。
一、缓存缓存是Redis 最常见的应用场景之一。
在高并发访问的场景下,通过将热门数据缓存到Redis 中,可以有效减轻数据库的压力,提高系统的访问速度。
缓存的数据可以是数据库查询结果、计算结果或外部API 的响应数据等。
通过设置合理的过期时间,可以控制缓存数据的更新频率。
二、消息队列Redis 的List 数据结构可以用作消息队列,常用于解耦系统的各个模块之间的通信。
生产者将消息推送到列表的尾部,消费者从列表的头部获取消息进行处理。
通过Redis 的多种操作命令,如push、pop、lrange 等,可以实现消息的发布和订阅、消息的顺序处理、消息的优先级等功能。
三、计数器Redis 的原子性操作使其成为一个很好的计数器工具。
通过使用Redis 的 INCR 和 DECR 命令,可以实现对数字类型的数据进行原子性的加减操作。
计数器可以用于统计网站的访问量、点赞数、点击数等,或者用于限流、防刷等功能。
四、排行榜Redis 的有序集合(Sorted Set)可以用于实现排行榜功能。
每个元素都有一个分数,通过修改分数可以改变元素的排名。
可以使用Redis 的 ZADD、ZRANGE、ZREVRANGE 等命令来添加、查询和获取排行榜的数据。
排行榜可以用于游戏的积分排名、音乐的热门歌曲排行等。
五、分布式锁在分布式系统中,为了保证数据的一致性和避免并发冲突,常常需要使用分布式锁。
Redis 的 SETNX 命令可以实现分布式锁的功能。
通过在Redis 中设置一个唯一的键值对作为锁,多个节点同时去竞争获取锁,只有一个节点能够成功获取锁并执行业务逻辑,其他节点需要等待或放弃。
分布式锁可以用于分布式任务调度、资源竞争场景等。
六、会话管理在Web 应用中,为了管理用户的会话状态,常常需要使用会话存储。
redis看门狗应用场景Redis是一个常用的开源的内存数据库,它被广泛应用于缓存、消息队列、实时统计等场景中。
而Redis看门狗则是Redis的一个重要特性,它能够在Redis主节点宕机时自动将从节点晋升为主节点,保证系统的高可用性。
本文将从多个实际应用场景出发,探讨Redis看门狗的应用。
1. 缓存系统缓存系统是Redis最常见的应用场景之一。
当一个客户端请求某个数据时,首先会在缓存系统中查找,如果缓存中存在该数据,则直接返回给客户端,从而避免了对数据库的访问。
而Redis看门狗可以实现缓存系统的高可用性。
当主节点宕机时,看门狗会自动将从节点晋升为主节点,保证缓存系统的正常运行。
2. 消息队列消息队列是一种常见的应用场景,用于实现异步通信、解耦系统等。
Redis的List数据结构非常适合实现简单的消息队列。
当消息生产者产生消息时,将消息推送到Redis的List中;而消息消费者则从List中取出消息进行处理。
而Redis看门狗可以保证消息队列的高可用性。
当主节点宕机时,看门狗会自动将从节点晋升为主节点,确保消息队列的正常运行。
3. 实时统计系统实时统计系统用于对大量数据进行实时处理和分析,常见的应用场景有实时监控、实时报表等。
Redis的高性能和内存存储特性使其成为实时统计系统的理想选择。
而Redis看门狗可以保证实时统计系统的高可用性。
当主节点宕机时,看门狗会自动将从节点晋升为主节点,确保实时统计系统的正常运行。
4. 分布式锁分布式锁是保证多个进程或线程并发访问共享资源时的一种常见机制。
Redis的setnx命令可以实现简单的分布式锁。
当一个进程需要获取锁时,它会尝试使用setnx命令在Redis中设置一个特定的键值对。
而Redis看门狗可以保证分布式锁的高可用性。
当主节点宕机时,看门狗会自动将从节点晋升为主节点,确保分布式锁的正常使用。
5. 分布式会话管理分布式会话管理是指将用户的会话信息存储在分布式系统中,实现跨节点的会话共享。
redis 数据结构及应用场景Redis是基于内存的键值(Key-Value)数据库,使用简单、高效、可靠等优点在互联网应用中广泛应用。
Redis的数据结构具有灵活、高效等特点,为应用场景提供了更多的解决方案。
本文将详细介绍Redis 的数据结构及应用场景。
一、Redis的数据结构1.字符串(String)字符串是Redis最基础的数据结构,它可以保存一个字符串或者整数。
在应用场景中,字符串数据结构适用于缓存和计数器等场景。
2.哈希(Hash)哈希是Redis中的一种复杂数据结构,它类似于Java或C语言中的Map或Dictionary。
哈希数据结构适用于存储对象、用户会话以及缓存等场景。
3.列表(List)列表是Redis中的一种数据结构,它可以保存一个有序的字符串列表。
列表可以用于排行榜、消息队列、任务队列等场景。
4.集合(Set)集合是Redis中的一种数据结构,它可以保存一组无序的字符串。
集合适用于数据去重、好友关注等场景。
5.有序集合(Sorted Set)有序集合是Redis中的一种数据结构,它可以保存一组有序的字符串。
有序集合适用于排行榜、新闻关注等场景。
二、Redis的应用场景1. 缓存Redis的字符串数据结构可以用于缓存数据。
缓存的读写速度较快,可以减少数据库的压力。
在实际应用中,可以将经常查询的数据存储到Redis中,方便快速访问。
2. 分布式锁当多个进程或线程同时操作同一个资源时,需要确保数据的一致性,这时可以利用Redis的数据结构来实现分布式锁。
例如,可以利用Redis的SETNX命令实现一个简单的分布式锁。
3. 计数器Redis的字符串数据结构可以用于实现计数器。
例如,可以利用Redis的INCR命令来实现对用户的访问次数进行统计。
4. 消息队列Redis的列表数据结构可以用于实现消息队列。
例如,可以利用Redis的LPUSH命令将消息插入队列中,利用RPOP命令读取队列中的消息。
redis 的应用场景Redis是一种高性能的键值存储系统,被广泛应用于各个领域。
本文将介绍Redis的应用场景,探讨其在不同场景下的优势和特点。
一、缓存系统Redis最常见的应用场景就是作为缓存系统。
由于其高速的读写性能和丰富的数据结构支持,Redis可以将热点数据存储在内存中,快速响应用户的查询请求,减轻后端数据库的压力。
在大型网站中,常常使用Redis作为缓存系统,将经常查询的数据存储在Redis中,加速网页的加载速度,提升用户体验。
二、消息队列Redis还可以作为消息队列系统使用。
其发布订阅机制和原子性操作的特性,使得Redis可以快速地实现消息的发布和订阅。
在分布式系统中,可以利用Redis的消息队列功能实现不同服务之间的解耦,提高系统的可扩展性和性能。
三、计数器由于Redis具有原子性操作的特性,因此非常适合用来实现计数器。
例如,网站的访问量统计、点赞数统计等都可以使用Redis的计数器功能来实现。
通过Redis的INCR命令,可以快速地对某个键的值进行原子性的自增操作,保证计数的准确性。
四、排行榜Redis的有序集合数据结构非常适合用来实现排行榜功能。
通过将用户的得分作为有序集合的分值,用户的ID作为有序集合的成员,可以快速地获取用户的排名和排行榜的前几名。
这在游戏、社交网络等场景中非常常见。
五、分布式锁在分布式系统中,经常需要使用分布式锁来保证多个节点之间的数据一致性。
Redis可以利用其原子性操作和过期时间的特性来实现分布式锁。
通过SETNX命令设置一个键值对,如果设置成功,则获取到锁,执行业务逻辑;如果设置失败,则表示锁已被其他节点获取,需要等待或进行其他处理。
六、会话管理在Web应用中,为了实现用户登录状态的管理,通常需要使用会话管理机制。
Redis可以将用户的登录信息存储在内存中,实现快速的会话管理。
通过将用户ID作为键,用户信息作为值,可以快速地获取用户的登录状态和相关信息。
redis的运用场景Redis的应用场景是围绕着它的本质来展开的,即分布式内存NoSql数据库。
以下是Redis的一些主要应用场景:1.缓存:缓存几乎是所有中大型网站都在使用的技术。
合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力。
Redis提供持久化服务,这使得它相对于其他存储在缓存应用方面更具优势。
2.排行榜/计数器:很多网站都有排行榜应用,如京东的月度销量榜单、商品按时间的上新排行榜等。
Redis提供的有序集合数据结构能实现各种复杂的排行榜应用。
同时,Redis的incr命令可以实现计数器功能,如电商网站商品的浏览量、视频网站视频的播放量等。
3.分布式会话:在集群模式下,当应用增多且相对复杂时,一般会搭建以Redis等内存数据库为中心的session服务,session不再由容器管理,而是由session服务及内存数据库管理。
4.分布式锁:在很多互联网公司中,分布式技术带来的技术挑战是对同一个资源的并发访问。
在这些并发量高的场合中,利用数据库锁来控制资源的并发访问可能不太理想,而Redis可以很好地处理这些问题。
5.社交网络:点赞、踩、关注/被关注、共同好友是社交网络的基本功能。
社交网络的访问量通常来说比较大,而且传统的关系数据库类型不适合存储这种类型的数据,Redis提供的哈希、集合等数据结构能很方便地实现这些功能。
此外,Redis还常被用于实现全页缓存(FPC)、发布/订阅、队列等功能。
请注意,以上只是Redis的一些常见应用场景,实际上Redis的用途远不止这些,开发者可以根据具体需求灵活运用Redis的各种功能。
Redis 集群模式是一种分布式存储解决方案,它将数据分布在多个 Redis 节点上,以提高系统的可伸缩性、可靠性和性能。
以下是一些 Redis 集群模式的应用场景:
1. 大规模数据存储:当需要存储大量数据时,单个 Redis 节点可能无法满足需求。
通过使用 Redis 集群,可以将数据分布在多个节点上,从而提高系统的存储容量和性能。
2. 高并发访问:在高并发环境下,单个 Redis 节点可能会成为性能瓶颈。
使用 Redis 集群可以将请求分发到多个节点上,从而提高系统的并发处理能力。
3. 数据备份与容灾:Redis 集群支持主从复制,其中一个节点作为主节点,其他节点作为从节点。
主节点负责处理写操作,而从节点用于备份数据并在主节点故障时提供容灾支持。
4. 分布式应用:在分布式应用中,不同的组件可能需要访问同一个数据集。
通过使用Redis 集群,可以将数据分布在多个节点上,使得分布式应用的各个组件能够就近访问数据,提高系统的性能和可靠性。
5. 弹性扩展:随着业务的增长,对 Redis 的需求可能会增加。
使用 Redis 集群可以方便地添加或删除节点,以适应不断变化的业务需求。
总之,Redis 集群模式适用于需要大规模数据存储、高并发访问、数据备份与容灾、分布式应用以及弹性扩展的场景。
通过将数据分布在多个 Redis 节点上,可以提高系统的性能、可靠性和可伸缩性,满足不同应用的需求。
Redis的常用应用场景1. 缓存应用背景在大型分布式系统中,数据库的读写操作是非常耗时的,而且随着并发访问量的增加,数据库的负载也会大幅度增加。
为了提高系统的性能和扩展性,可以使用Redis作为缓存来减轻数据库的压力。
应用过程1.客户端向Redis发起请求,查询某个数据是否存在于缓存中。
2.Redis检查缓存中是否存在该数据,如果存在则直接返回给客户端。
3.如果缓存中不存在该数据,Redis就会去数据库中查询,并将查询结果存放到缓存中。
4.将查询结果返回给客户端。
应用效果•提高系统的读取性能:由于Redis是基于内存的,相比于磁盘的数据库,读写速度更快。
•减轻数据库的压力:通过将热门数据缓存在Redis中,减少了对数据库的访问次数,从而提高了数据库的性能和扩展性。
2. 分布式锁应用背景在分布式系统中,多个节点同时对同一资源进行操作时,可能会出现竞争的情况,为了避免数据不一致或者重复操作的问题,可以使用分布式锁来保证同一时间只有一个节点可以访问共享资源。
应用过程1.客户端请求获取锁。
2.Redis检查是否已经有其他客户端持有该锁,如果没有则将锁分配给当前客户端。
3.当前客户端执行操作。
4.操作完成后,释放锁,其他客户端可以继续请求获取锁。
应用效果•避免数据不一致:通过分布式锁,可以保证在同一时间只有一个节点对共享资源进行操作,避免了数据不一致的问题。
•避免重复操作:通过分布式锁,可以防止多个节点同时对同一资源进行重复操作。
3. 计数器应用背景在很多应用中,需要统计用户的点击次数、访问次数等数据。
使用传统的数据库来进行计数操作是非常低效的,而Redis提供了原子性的操作,非常适合用来实现计数器功能。
应用过程1.客户端每次请求时,将计数器的值加1。
2.Redis接收到请求后,通过自增操作将计数器的值加1。
3.将新的计数器值返回给客户端。
应用效果•高效计数:Redis提供了原子性的自增操作,可以高效地实现计数功能。
redis应用场景及实现全文共四篇示例,供读者参考第一篇示例:Redis(Remote Dictionary Server)是一个开源的内存中数据结构存储系统,被称为"数据结构服务器"。
它支持多种数据结构,如字符串(string)、列表(list)、集合(set)、散列表(hash)、有序集合(sorted set)等,并提供丰富的操作命令,如添加、删除、修改、查询等。
Redis的出色性能和高可用性,使其成为众多互联网应用的首选解决方案。
一、应用场景1. 缓存系统Redis最为常见的应用场景之一是作为缓存系统。
应用程序可以将频繁访问的数据存储在Redis中,下次请求时可以直接从内存中读取,加速数据的访问速度。
与传统的磁盘存储方式相比,Redis的读写速度更快,适合处理高并发请求。
2. 分布式锁在分布式系统中,为了保证数据的一致性,需要对共享资源进行加锁操作。
Redis提供了分布式锁的实现方式,可以通过SETNX命令在Redis中创建一个键值对作为锁,利用其互斥性质确保只有一个客户端能够执行关键代码。
3. 消息队列Redis的发布订阅(Pub/Sub)功能可以实现简单的消息队列系统。
发布者将消息发送到指定的频道,订阅者可以订阅感兴趣的频道,并在消息到达时接收通知。
这种架构可以实现解耦和异步处理,提高系统的可伸缩性。
4. 计数器Redis提供了INCR和DECR命令来实现原子自增和自减操作,非常适合实现计数器功能。
可以用于统计网站访问量、商品销量、用户活跃度等数据,方便快速地进行实时统计。
5. 分布式存储Redis支持主从复制和Sentinel哨兵机制,可以构建高可用的分布式存储系统。
数据可以在多个节点之间进行同步和备份,保证数据的可用性和可靠性。
二、实现方式1. 安装部署可以从Redis官方网站下载最新版本的Redis,并按照官方文档的指引进行安装和部署。
通常Redis运行在Linux系统上,使用命令行管理客户端进行配置和操作。
简述redis运用场景Redis是一款高性能的内存数据库,常用于缓存、消息队列、计数器、排行榜等场景。
下面将详细介绍Redis的运用场景。
1. 缓存Redis最常见的用途就是缓存。
将热点数据存储在Redis中,可以大大提高系统的响应速度和并发能力。
Redis支持多种数据结构,如字符串、哈希表、列表、集合和有序集合,可以根据不同的业务需求选择合适的数据结构进行缓存。
同时,Redis还支持设置过期时间,可以自动删除过期的缓存数据,避免缓存数据过期后仍然被使用的情况。
2. 消息队列Redis的列表数据结构可以用作消息队列,支持生产者和消费者模式。
生产者将消息推入列表中,消费者从列表中取出消息进行处理。
Redis 的消息队列具有高性能、高可靠性和可扩展性等优点,可以应用于各种场景,如异步任务处理、日志处理、实时数据处理等。
3. 计数器Redis的计数器功能可以用于统计网站的PV、UV等数据。
通过使用Redis的自增命令,可以实现高并发下的计数器功能。
同时,Redis还支持位图数据结构,可以用于统计用户签到、活跃度等数据。
4. 排行榜Redis的有序集合数据结构可以用于实现排行榜功能。
将用户的得分作为有序集合的分值,用户ID作为有序集合的成员,可以方便地实现排行榜功能。
同时,Redis还支持有序集合的范围查询和排名查询,可以方便地实现排行榜的展示和查询。
5. 分布式锁Redis的分布式锁功能可以用于解决分布式系统中的并发问题。
通过使用Redis的SETNX命令,可以实现分布式锁的获取和释放。
同时,Redis还支持设置锁的过期时间,避免锁被长时间占用的情况。
总之,Redis具有高性能、高可靠性和可扩展性等优点,可以应用于各种场景。
除了以上介绍的场景,Redis还可以用于会话管理、地理位置查询、实时消息推送等场景。
因此,Redis已经成为了现代互联网应用开发中不可或缺的一部分。
Redis应用场景目录(?)[-]1. 1 MySqlMemcached架构的问题2. 2 Redis常用数据类型3. 3 各种数据类型应用和实现方式1. String2. Hash3. List4. Set5. Sorted Set6. PubSub7. Transactions4. 4 Redis实际应用场景1. 显示最新的项目列表2. 删除与过滤3. 排行榜相关4. 按照用户投票和时间排序5. 处理过期项目6. 计数7. 特定时间内的特定项目8. 实时分析正在发生的情况用于数据统计与防止垃圾邮件等9. PubSub10. 队列11. 缓存5. 5 国内外三个不同领域巨头分享的Redis实战经验及使用场景1. 一新浪微博史上最大的Redis集群1. Redis使用场景2. Redis使用的重要点3. Plans in future2. 二PinterestReids维护上百亿的相关性3. 三ViacomRedis在系统中的用例盘点Memcached采用客户端-服务器的架构,客户端和服务器端的通讯使用自定义的协议标准,只要满足协议格式要求,客户端Library可以用任何语言实现。
Memcached服务器使用基于Slab的内存管理方式,有利于减少内存碎片和频繁分配销毁内存所带来的开销。
各个Slab按需动态分配一个page的内存(和4Kpage的概念不同,这里默认page为1M),page内部按照不同slab class的尺寸再划分为内存chunk供服务器存储KV键值对使用(slab机制相当于内存池机制, 实现从操作系统分配一大块内存, 然后memcached 自己管理这块内存, 负责分配与回收。
)关于memcached的内存分配机制:Memcached 内存分配机制介绍实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。
2.Memcached与MySQL数据库数据一致性问题。
3.Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL无法支撑。
4.跨机房cache同步问题。
关于memcached问题:Memcache存储大数据的问题众多NoSQL百花齐放,如何选择最近几年,业界不断涌现出很多各种各样的NoSQL产品,那么如何才能正确地使用好这些产品,最大化地发挥其长处,是我们需要深入研究和思考的问题,实际归根结底最重要的是了解这些产品的定位,并且了解到每款产品的tradeoffs,在实际应用中做到扬长避短,总体上这些NoSQL主要用于解决以下几种问题1.少量数据存储,高速读写访问。
此类产品通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景。
2.海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除。
3.这方面最具代表性的是dynamo和bigtable 2篇论文所阐述的思路。
前者是一个完全无中心的设计,节点之间通过gossip方式传递集群信息,数据保证最终一致性,后者是一个中心化的方案设计,通过类似一个分布式锁服务来保证强一致性,数据写入先写内存和redo log,然后定期compat归并到磁盘上,将随机写优化为顺序写,提高写入性能。
4.Schema free,auto-sharding等。
比如目前常见的一些文档数据库都是支持schema-free的,直接存储json格式数据,并且支持auto-sharding等功能,比如mongodb。
面对这些不同类型的NoSQL产品,我们需要根据我们的业务场景选择最合适的产品。
Redis最适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就会有疑问,似乎Redis更像一个加强版的Memcached,那么何时使用Memcached,何时使用Redis呢?如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:1 、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
2 、Redis支持数据的备份,即master-slave模式的数据备份。
3 、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis最为常用的数据类型主要有以下:∙String∙Hash∙List∙Set∙Sorted set∙pub/sub∙Transactions在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的:首先Redis内部使用一个redisObject对象来表示所有的key和value,redisObject 最主要的信息如上图所示:type代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:type=string代表value存储的是一个普通字符串,那么对应的encoding可以是raw或者是int,如果是int则代表实际redis内部是按数值型类存储和表示这个字符串的,当然前提是这个字符串本身可以用数值表示,比如:"123" "456"这样的字符串。
这里需要特殊说明一下vm字段,只有打开了Redis的虚拟内存功能,此字段才会真正的分配内存,该功能默认是关闭状态的,该功能会在后面具体描述。
通过上图我们可以发现Redis使用redisObject来表示所有的key/value数据是比较浪费内存的,当然这些内存管理成本的付出主要也是为了给Redis不同数据类型提供一个统一的管理接口,实际作者也提供了多种方法帮助我们尽量节省内存使用,我们随后会具体讨论。
3. 各种数据类型应用和实现方式下面我们先来逐一的分析下这7种数据类型的使用和内部实现方式:∙String:Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字.常用命令: set,get,decr,incr,mget 等。
应用场景:String是最常用的一种数据类型,普通的key/ value 存储都可以归为此类.即可以完全实现目前 Memcached 的功能,并且效率更高。
还可以享受Redis的定时持久化,操作日志及Replication等功能。
除了提供与 Memcached 一样的get、set、incr、decr 等操作外,Redis还提供了下面一些操作:o获取字符串长度o往字符串append内容o设置和获取字符串的某一段内容o设置及获取字符串的某一位(bit)o批量设置一系列字符串的内容实现方式:String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。
∙Hash常用命令:hget,hset,hgetall 等。
应用场景:在Memcached中,我们经常将一些结构化的信息打包成HashMap,在客户端序列化后存储为一个字符串的值,比如用户的昵称、年龄、性别、积分等,这时候在需要修改其中某一项时,通常需要将所有值取出反序列化后,修改某一项的值,再序列化存储回去。
这样不仅增大了开销,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。
而Redis的Hash结构可以使你像在数据库中Update一个属性一样只修改某一项属性值。
我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户信息对象数据,包含以下信息:用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,主要有以下2种存储方式:第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题。
第二种方法是这个用户信息对象有多少成员就存成多少个key-value对儿,用用户ID+对应属性的名称作为唯一标识来取得对应属性的值,虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据,内存浪费还是非常可观的。
那么Redis提供的Hash很好的解决了这个问题,Redis的Hash实际是内部存储的Value 为一个HashMap,并提供了直接存取这个Map成员的接口,如下图:也就是说,Key仍然是用户ID, value是一个Map,这个Map的key是成员的属性名,value 是属性值,这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题。
很好的解决了问题。
这里同时需要注意,Redis提供了接口(hgetall)可以直接取到全部的属性数据,但是如果内部Map的成员很多,那么涉及到遍历整个内部Map的操作,由于Redis单线程模型的缘故,这个遍历操作可能会比较耗时,而另其它客户端的请求完全不响应,这点需要格外注意。
实现方式:上面已经说到Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。
∙List常用命令:lpush,rpush,lpop,rpop,lrange等。
应用场景:Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现。
Lists 就是链表,相信略有数据结构知识的人都应该能理解其结构。
使用Lists结构,我们可以轻松地实现最新消息排行等功能。