您当前的位置: 首页 >  redis

cuiyaonan2000

暂无认证

  • 0浏览

    0关注

    248博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Redis Cluster的问题

cuiyaonan2000 发布时间:2021-06-23 14:48:30 ,浏览量:0

序言

这里主要讨论解决Redis Cluster集群环境下的高并发问题.

 

问题

Redis的命令是串行执行的,但是在集群环境下命令的顺序是不能保证的,不同线程之间对同一个KEY的操作会有嵌套,造成数据不准确.

如果是Redis服务器是不是集群,则可以使用Multi,Exec,Watch的命令组合来解决原子性问题.

同时也可以根据业务情况独立一个Redis服务器,使用Multi,Exec,Watch来解决该问题(这也不失一种解决方案,毕竟分布式锁更消耗性能cuiyaonan2000@163.com)

 

 

解决方法1

Redis引入了Lua脚本.

可以使用Lua脚本把一些简单的逻辑操作和Redis操作放在一起,作为一个整体传递给Redis服务器依次执行.cuiyaonan2000@163.com

 

Lua

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的,该小组成员有:Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo。

Lua特性
  • 轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。
  • 可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。
  • 其它特性:
    • 支持面向过程编程和函数式编程;
    • 自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;
    • 语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;
    • 通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等。
Lua对于Redis的特点

lua的程序有点像存储过程,存储在redis上,来提高服务的整体效率cuiyaonan2000@163.com.

  • 减少网络开销: 即将多个命令整合到一起传递给Redis服务器
  • 原子操作:多个命令在Redis服务器上是串行执行,不会受到其它线程的影响.
  • 复用性:客户端发送的脚本会永久存在redis中,这样其他客户端可以复用这一脚本,而不需要使用代码完成相同的逻辑。

 

 

解决方法2

 

分布式锁

关注
打赏
1638267374
查看更多评论
立即登录/注册

微信扫码登录

1.7735s