美文网首页我爱编程
Redis之前的思考笔记

Redis之前的思考笔记

作者: 小雪的笔记 | 来源:发表于2018-04-23 22:20 被阅读0次

    预分片(数据迁移的方式基于当前使用爹redis2.0+的版本 3.0+服务端可以自动分片和迁移)

    我们已经知道分片存在的一个问题,除非我们使用 Redis 作为缓存,增加和删除节点是一件很棘手的事情,使用固定的键和实例映射要简单得多。

    然而,数据存储的需求可能一直在变化。今天我可以接受 10 个 Redis 节点(实例),但是明天我可能就需要 50 个节点。

    因为Redis 只有相当少的内存占用(footprint)而且轻量级(一个空闲的实例只是用 1MB 内存),一个简单的解决办法是一开始就开启很多的实例。即使你一开始只有一台服务器,你也可以在第一天就决定生活在分布式的世界里,使用分片来运行多个 Redis 实例在一台服务器上。

    你一开始就可以选择很多数量的实例。例如,32 或者 64 个实例能满足大多数的用户,并且为未来的增长提供足够的空间。

    这样,当你的数据存储需要增长,你需要更多的 Redis 服务器,你要做的就是简单地将实例从一台服务器移动到另外一台。当你新添加了第一台服务器,你就需要把一半的 Redis 实例从第一台服务器搬到第二台,如此等等。

    使用Redis 复制,你就可以在很小或者根本不需要停机时间内完成移动数据:

    在你的新服务器上启动一个空实例。

    移动数据,配置新实例为源实例的从服务。

    停止你的客户端。

    更新被移动实例的服务器 IP 地址配置。

    向新服务器上的从节点发送 SLAVEOF NO ONE 命令。

    以新的更新配置启动你的客户端。

    最后关闭掉旧服务器上不再使用的实例。

    redis客户端和服务端分片两种方式:

    3.0以下没有服务端分片,一般使用Java shardjedis客户端进行分片,如果需要扩展节点,需要重新使用工具进行重新处理数据之后导入处理;(2.0+的客户端分片算法可以参看前面的笔记)

    3.0以上服务端分片,增加节点,可以出发命令,服务端自动进行数据的分片处理。

    redis批量脚本导入功能,可以考虑作为数据迁移使用


    cat redis_commands.txt | redis-cli -h10.31.11.190 -p 5416 -a nn5oqo93 --pipe


     redis_commands.tx为redis的命令行  (无需所谓的转换成redisProtocol)


    set name0 hellowworld

    set name1 hellowworld

    set name2 hellowworld

    set name3 hellowworld

    set name4 hellowworld


     防刷控制可以使用setnx控制代码块,注意设置失效时间,否则异常redis无法删除的场景导致功能不可用


       ucRedisDao.setnx(openidLock, "1",60);(使用分布式锁)

       ucRedisDao.del(openidLock);

    redis事物控制:

    redis >MULTI OK

    redis > SET "username"

    "bugall"

    QUEUED

    redis > SET "password"161616

    QUEUED

    redis > GET "username"

    redis >EXEC

    1) ok 2) "bugall" 3) "bugall"

    事务中不能有失败的情况,失败了就无法回滚

    redis> MULTI

    OK

    redis > GET

    (error) ERR wrong number of arguments for 'get' command

    redis > GET username

    QUEUED

    redis > EXEC

    (error) EXECABORT Transaction discarded because of previous errors


    redis的事务和传统的关系型数据库事务的最大区别在于,redis不支持事务的回滚机制,即使事务队列中的某个命令在执行期间出现错误,整个事务也会继续执行下去,直到将事务队列中的所有命令都执行完毕为止

    相关文章

      网友评论

        本文标题:Redis之前的思考笔记

        本文链接:https://www.haomeiwen.com/subject/rvyrlftx.html