redis之应用场景

☆ redis之安装部署
☆ redis之基本使用
☆ redis之应用场景
☆ redis之源码制作rpm包

1、配合关系型数据库做高速缓存

1.1、热点数据缓存

查询热点数据缓存。

1.2、会话缓存( Session Cache)

用Redis 缓存会话比其他存储(如Memcached)的优势在于:Redis 提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失, 大部分人都会不高兴的, 现在,他们还会这样吗? 幸运的是,随着Redis 这些年的改进,很容易找到怎么恰当的使用Redis 来缓存会话的文档。甚至广为人知的商业平台Magento 也提供Redis 的插件。

1.3、全页缓存( FPC)

除基本的会话token 之外,Redis 还提供很简便的FPC 平台。回到一致性问题,即使重启了Redis 实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP 本地FPC。再次以Magento 为例,Magento提供一个插件来使用Redis 作为全页缓存后端。此外,对WordPress 的用户来说,Pantheon 有一个非常好的插件wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

2、多样的数据结构存储持久化数据

2.1、最新N个数据

通过List实现按自然时间排序的数据。

2.2、排行榜 topN

利用zset(有序集合);Redis 在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis 只是正好提供了这两种数据结构。所以, 我们要从排序集合中获取到排名最靠前的10个用户– 我们称之为“ user_scores”,我们只需要像下面一样执行即可: 当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行: ZRANGE user_scores 0 10 WITHSCORES Agora Games 就是一个很好的例子,用Ruby 实现的, 它的排行榜就是使用Redis 来存储数据的,你可以在这里看到。

2.3、时效性数据(验证码等)

expire过期性质

2.4、计数器、秒杀

原子性,自增方法incrdecr

2.5、去除大量数据中的重复数据

利用set集合

2.6、队列

Reids 在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis 作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。如果你快速的在Google中搜索“ Redis queues”,你马上就能找到大量的开源项目, 这些项目的目的就是利用 Redis 创建非常好的后端工具,以满足各种队列需求。例如, Celery 有一个后台就是使用Redis 作为broker,你可以从这里去查看。

2.7、发布/订阅 消息系统

Redis 提供发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis 的发布/订阅功能来建立聊天系统!

3、Redis 中 List 常用操作

在 Redis 中,List 是一种常用的数据类型,它可以像 Java 中的数组一样,保存一组有序的数据。Redis 中的 List 支持从两端进行元素的插入和删除操作,非常适合在消息队列、栈、队列等场景中使用。下面是 Redis 中 List 常用的一些操作:

  1. LPUSH:将元素添加到 List 的左侧

    redis> LPUSH mylist "world"
    (integer) 1
    redis> LPUSH mylist "hello"
    (integer) 2
    redis> LRANGE mylist 0 -1
    1) "hello"
    2) "world"
    
  2. RPUSH:将元素添加到 List 的右侧

    redis> RPUSH mylist "hello"
    (integer) 1
    redis> RPUSH mylist "world"
    (integer) 2
    redis> LRANGE mylist 0 -1
    1) "hello"
    2) "world"
    
  3. LPOP:从 List 的左侧弹出元素

    redis> LPOP mylist
    "hello"
    redis> LRANGE mylist 0 -1
    1) "world"
    
  4. RPOP:从 List 的右侧弹出元素

    redis> RPOP mylist
    "world"
    redis> LRANGE mylist 0 -1
    (empty list or set)
    
  5. LINDEX:获取 List 中指定位置的元素

    redis> LPUSH mylist "world"
    (integer) 1
    redis> LPUSH mylist "hello"
    (integer) 2
    redis> LINDEX mylist 0
    "hello"
    redis> LINDEX mylist 1
    "world"
    
  6. LTRIM:修剪 List,只保留指定区间内的元素

    redis> LPUSH mylist "world"
    (integer) 1
    redis> LPUSH mylist "hello"
    (integer) 2
    redis> LPUSH mylist "foo"
    (integer) 3
    redis> LPUSH mylist "bar"
    (integer) 4
    redis> LRANGE mylist 0 -1
    1) "bar"
    2) "foo"
    3) "hello"
    4) "world"
    redis> LTRIM mylist 1 2
    OK
    redis> LRANGE mylist 0 -1
    1) "foo"
    2) "hello"
    
  7. LLEN:获取 List 的长度(即包含元素的个数)

    redis> LPUSH mylist "world"
    (integer) 1
    redis> LPUSH mylist "hello"
    (integer) 2
    redis> LLEN mylist
    (integer) 2
    
  8. LRANGE:获取 List 中指定区间范围内的元素

    redis> LPUSH mylist "world"
    (integer) 1
    redis> LPUSH mylist "hello"
    (integer) 2
    redis> LPUSH mylist "foo"
    (integer) 3
    redis> LPUSH mylist "bar"
    (integer) 4
    redis> LRANGE mylist 1 3
    1) "foo"
    2) "hello"
    3) "world"
    

通过上面这些操作,可以方便地使用 Redis 的 List,实现各种队列、栈等数据结构。另外,List 在 Redis 中还被广泛用于实现简单的消息队列、任务队列等场景,可以实现消息的生产、消费等功能。

4、Redis 中 Sorted Set 常用操作

在 Redis 中,有序集合(Sorted Set)是一种基于哈希表和跳跃表(Skip List)实现的数据结构,它类似于 Set,但每个元素都会关联一个分值,因此元素的插入、删除和查找都支持按照分值进行有序操作。有序集合在实现排行榜、任务调度等场景中非常有用。下面是 Redis 中 Sorted Set 常用的一些操作:

  1. ZADD:添加元素到有序集合中

    redis> ZADD myzset 1 "one"
    (integer) 1
    redis> ZADD myzset 2 "two"
    (integer) 1
    redis> ZADD myzset 3 "three" 4 "four"
    (integer) 2
    
  2. ZRANGE:获取有序集合中指定范围的元素

    redis> ZADD myzset 1 "one"
    (integer) 1
    redis> ZADD myzset 2 "two"
    (integer) 1
    redis> ZADD myzset 3 "three" 4 "four"
    (integer) 2
    redis> ZRANGE myzset 0 -1
    1) "one"
    2) "two"
    3) "three"
    4) "four"
    redis> ZRANGE myzset 1 3
    1) "two"
    2) "three"
    3) "four"
    
  3. ZREM:从有序集合中移除指定元素

    redis> ZADD myzset 1 "one"
    (integer) 1
    redis> ZADD myzset 2 "two"
    (integer) 1
    redis> ZADD myzset 3 "three" 4 "four"
    (integer) 2
    redis> ZREM myzset "two"
    (integer) 1
    redis> ZRANGE myzset 0 -1
    1) "one"
    2) "three"
    3) "four"
    
  4. ZSCORE:获取指定元素的分值

    redis> ZADD myzset 1 "one"
    (integer) 1
    redis> ZADD myzset 2 "two"
    (integer) 1
    redis> ZADD myzset 3 "three" 4 "four"
    (integer) 2
    redis> ZSCORE myzset "three"
    "3"
    
  5. ZCARD:获取有序集合中元素的数量

    redis> ZADD myzset 1 "one"
    (integer) 1
    redis> ZADD myzset 2 "two"
    (integer) 1
    redis> ZADD myzset 3 "three" 4 "four"
    (integer) 2
    redis> ZCARD myzset
    (integer) 4
    
  6. ZCOUNT:获取有序集合中指定分值范围内的元素数量

    redis> ZADD myzset 1 "one"
    (integer) 1
    redis> ZADD myzset 2 "two"
    (integer) 1
    redis> ZADD myzset 3 "three" 4 "four"
    (integer) 2
    redis> ZCOUNT myzset 2 3
    (integer) 2
    
  7. ZRANK:获取有序集合中指定元素的排名(排行)

    redis> ZADD myzset 1 "one"
    (integer) 1
    redis> ZADD myzset 2 "two"
    (integer) 1
    redis> ZADD myzset 3 "three" 4 "four"
    (integer) 2
    redis> ZRANK myzset "three"
    (integer) 2
    

通过上面这些操作,可以方便地使用 Redis 的 Sorted Set,实现各种排行榜、任务调度等功能。其中,ZADD、ZREM、ZRANK 等操作常用于实现排名系统和任务调度系统,ZRANGE、ZSCORE、ZCOUNT 常用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值