rides是什么?能做什么?不能做什么?

rides是什么?能做什么?不能做什么?

什么是redis
Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上:Redis的数据结构致力于帮助用户解决问题,而不会像其他数据库那样,要求用户扭曲问题来适应数据库。除此之外,通过复制、持久化(persistence)和客户端分片(client-side sharding)等特性,用户可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。
Redis能做什么?

  1. 缓存,毫无疑问这是Redis当今最为人熟知的使用场景。再提升服务器性能方面非常有效;
  2. 排行榜,如果使用传统的关系型数据库来做这个事儿,非常的麻烦,而利用Redis的SortSet数据结构能够非常方便搞定;
  3. 计算器/限速器,利用Redis中原子性的自增操作,我们可以统计类似用户点赞数、用户访问数等,这类操作如果用MySQL,频繁的读写会带来相当大的压力;限速器比较典型的使用场景是限制某个用户访问某个API的频率,常用的有抢购时,防止用户疯狂点击带来不必要的压力;
  4. 注:限速器也是对请求限流的一种实现方式。
  5. 好友关系,利用集合的一些命令,比如求交集、并集、差集等。可以方便搞定一些共同好友、共同爱好之类的功能;
  6. 简单消息队列,除了Redis自身的发布/订阅模式,我们也可以利用List来实现一个队列机制,比如:到货通知、邮件发送之类的需求,不需要高可靠,但是会带来非常大的DB压力,完全可以用List来完成异步解耦;
  7. Session共享,默认Session是保存在服务器的文件中,即当前服务器,如果是集群服务,同一个用户过来可能落在不同机器上,这就会导致用户频繁登陆;采用Redis保存Session后,无论用户落在那台机器上都能够获取到对应的Session信息。
    Redis不能做什么
    Redis感觉能干的事情特别多,但它不是万能的,合适的地方用它事半功倍。如果滥用可能导致系统的不稳定、成本增高等问题。

比如,用Redis去保存用户的基本信息,虽然它能够支持持久化,但是它的持久化方案并不能保证数据绝对的落地,并且还可能带来Redis性能下降,因为持久化太过频繁会增大Redis服务的压力。

简单总结就是数据量太大、数据访问频率非常低的业务都不适合使用Redis。

数据太大会增加成本,访问频率太低,保存在内存中纯属浪费资源。如果不担心浪费资源,那请忽略。
为什么要使用Redis
内存式: Redis将键值存储在主存中,用于快速地读写访问。

复制: Redis支持主从复制。数据读取在slave完成,而数据写入在 master 完成。复制提供可伸缩性和可用性。任何一个slave宕机,其他的slave还可以提供数据访问。

数据结构: Redis不仅存储字符串,还支持列表,集合,哈希和有序集合。

虚拟内存: Redis使用RAM作为内存式存储。但是,在内存不足的情况下,它使用虚拟内存来保存数据。

发布/订阅模型: Redis支持创建发布和订阅通道,这样Redis客户端可以订阅任意的通道来进行数据消费,并且任何已订阅该通道的客户端可以发布数据。

数据持久性: Redis将内存中的数据定期保存到文件系统中。当Redis节点故障时,数据可以从Redis数据文件恢复。
丰富的数据类型;

Redis有8种数据类型,当然常用的主要是 String、Hash、List、Set、 SortSet 这5种类型(还有Bitmaps-位图、HyperLogLog、GEO-地理信息定位),他们都是基于键值的方式组织数据。每一种数据类型提供了非常丰富的操作命令,可以满足绝大部分需求,如果有特殊需求还能自己通过 lua 脚本自己创建新的命令(具备原子性);

除了提供的丰富的数据类型,Redis还提供了像慢查询分析、性能测试、Pipeline、事务、Lua自定义命令、Bitmaps、HyperLogLog、发布/订阅、Geo等个性化功能。

Redis的代码开源在GitHub,代码非常简单优雅,任何人都能够吃透它的源码;它的编译安装也是非常的简单,没有任何的系统依赖;有非常活跃的社区,各种客户端的语言支持也是非常完善。另外它还支持事务(没用过)、持久化、主从复制让高可用、分布式成为可能。

做为一个开发者,对于我们使用的东西不能让它成为一个黑盒子,我们应该深入进去,对它更了解、更熟悉。

总结Redis特性

速度快

数据存放在内存中;单线程模式,避免了线程上下文切换及多线程竞争访问;c语言实现,更容易接近系统api;采用epoll非阻塞IO,不在网络上浪费时间;

支持多种数据类型

支持8种数据类型:String、Hash、List、Set、 SortSet、Bitmaps、HyperLogLog、GEO;

功能丰富

丰富的API,如可设置键过期,存在即设置(这可以用来解决分布式锁问题),基于发布订阅可实现简单的消息队列,通过Lua创建新命令,具有原子性,管道(pipeline)功能,解决网络开销;

服务器简单

开源代码优雅,容易阅读源码,采用单线程模型,避免并发问题,redis自己实现了多路复用;

客户端语言版本多

如Java、Php、Go

支持多种持久化方式

RDB和AOP

支持集群部署

支持主从复制,高可用集群,内部集群方式与Memcache做集群实现不一样的机制。

Rides是一个分布式锁实现的库,它提供了简单而强大的分布式锁功能。你可以使用Rides来保证在分布式系统中的多个节点之间互斥地访问共享资源。 要使用Rides实现分布式锁,你需要先安装Rides库,并确保所有的节点都能够访问到该库。然后,你可以按照以下步骤来实现分布式锁: 1. 创建一个Rides实例:首先,你需要创建一个Rides实例,这个实例将负责协调各个节点之间的锁状态。你可以使用Rides的构造函数来创建实例,传入一个唯一的标识符作为参数。 2. 获取锁:当一个节点需要访问共享资源时,它可以通过调用Rides实例的`acquire`方法来获取锁。这个方法会返回一个布尔值,表示是否成功获取到了锁。如果获取到了锁,节点就可以继续执行后续的操作;如果没有获取到锁,则需要等待一段时间后再次尝试。 3. 释放锁:当一个节点完成了对共享资源的访问后,它应该调用Rides实例的`release`方法来释放锁。这样,其他节点就有机会获取到锁并继续执行它们的操作。 需要注意的是,Rides并不提供自动解锁的功能。所以,在使用Rides时,你需要确保在获取到锁之后,一定要记得在适当的时候释放锁,否则可能会导致资源无法被其他节点访问。 以上就是使用Rides实现分布式锁的基本步骤。通过Rides,你可以方便地实现分布式系统中的资源互斥访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值