怎么用Python写一个图片迁移脚本?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jnshu_it/article/details/84898032

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能,本篇分享的是:

【 怎么用Python写一个图片迁移脚本?】

大家好,我是IT修真院深圳分院第十三期学员,一枚正直纯洁善良的JAVA程序员。 今天给大家分享一下,修真院官网JAVA任务7里面的知识点:

怎么用Python写一个图片迁移脚本?

1 背景介绍

随着企业数据量的增多,Redis不论作为数据存储或是缓存,它的数据量也会逐渐增多,虽然Redis的速度非常可观,但随着其中的数据量的庞大,并且仅仅在一个设备或是一个Redis实例中,其存取速度也会大打折扣,所以我们需要在不同的设备或服务器上,搭建多个Redis实例仓库,将原来的Redis的所有的keys分发到各个服务器的Redis上,这就是现在所谓的Redis集群(Redis Cluster)

2.知识剖析

2.1REDIS-CLUSTER原理

Redis-Cluster中的节点是可以相互通信的,客户端可以通过访问任意节点都可以访问集群内的数据

1、Redis-Cluster所有节点之间通过PING-PONG机制进行关联,内部使用二进制协议优化传输速度和带宽,所以Redis的传输特别快。

2、Redis-Cluster检测节点是否宕机有它独特的机制。

3、客户端可以直接连接Redis节点,不需要连接所有节点,连接集群中任何一个可用节点即可。

4、Redis-Cluster把所有的节点映射到slot上,Cluster主要负责维护node<->slot<->value

5.Redis集群中内置了16384个哈希槽,Cluster会给不同的节点分配哈希槽,不同的节点分配编号在0-16383之间的哈希槽,也就是将哈希槽映射到redis集群的节点。Cluster主要负责维护节点-哈希槽-值之间的关系。

2.2REDIS-CLUSTER容错机制

Redis-Cluster检测节点是否宕机时采用投票的方式。节点之间通过PING-PONG机制联系,如果有一半以上的master节点在默认的回应时间内联系某个节点失败,则会认为该节点已经宕机了。主节点宕机后,从节点会暂时作为主节点来接替主节点的工作,但并不总是能顶替。当出现以下两种情况时,可以认为Redis-Cluster已经宕掉了:

1、如果集群中的主节点宕机后,当前master节点没有slave节点,则集群进入宕机状态,也就是集群的slot映射不成功。

2、如果集群中的master节点超过一半以上宕机,无论是否有slave节点,集群都会处于宕机状态

2.3概括

Redis集群采用哈希槽进行节点映射,映射时会采用一定的算法。Cluster会根据节点的数量来分配映射的哈希槽,每个节点占据一定个数的哈希槽。Redis-Cluster的节点采用主备模式,当客户端向Redis的某个master节点存储数据时,master节点也会把数据同步到slave节点,保持master节点和slave节点的数据一致。

3.常见问题

4.解决方案

在一台机器上用多个端口启动多个redis服务来模拟集群

5.编码实战

task6_redis.redis_cachedorg.apache.log4j.Loggerorg.springframework.stereotype.task6_redis.dao.PositionStuDaotask6_redis.pojo.PositionStutask6_redis.util.RedisUtiljavax.annotation.java.util.ArrayListjava.util.ListPositionStuRedisImpl PositionStuRedis {
    (= )
    PositionStuDao (= )
    RedisUtil Logger =Logger.(PositionStuRedisImpl.)List<PositionStu> () {
        .info()List<Object> list =.lGet(-).info(list)(list.size()==){
            .info().saveRedisCached()list =.lGet(-).info(list)}
        List<PositionStu> positionStus =ArrayList<>()(Object i:list){
            .info(i.toString())PositionStu p =(PositionStu) .get(i.toString()).info(+p.toString())positionStus.add(p)}
        positionStus}

    Integer (PositionStu positionStu) {
        .info()Integer i=.savePosition(positionStu)(i>){
            .del().saveRedisCached()}
        i}

    PositionStu (Integer id){
        PositionStu positionStu=(.hasKey(id.toString())){
            .info()(PositionStu) .get(id.toString())}{
            .info()positionStu =.queryPos(id)(positionStu!=){
                .info().set(positionStu.getPosId().toString()positionStu)}{
                .info().set(id.toString())}
        }
        (PositionStu) .get(id.toString())}


    (){
        .info()List<PositionStu> positionStus =.goodShow().info(positionStus)(positionStus.size()!=){
            (PositionStu p:positionStus){
                .info(+p)b =.set(p.getPosId().toString()p).info(+b)(b) {
                    .info().lSet(p.getPosId())}
            }
        } {
            .set()}
        .info(+.lGet(-))}

6.扩展思考:
redis集群有很多中方案,而且redis集群在企业中运用也比较广注
7.参考文献
CSDN、百度百科
8 更多讨论
总结:
1))为什么servlet里面的有些对象不能满足那个需求?
首先我们来分析业务需求,在页面显示你的账号,可以清楚的知道多个请求都会显示,所以Resquest,response不行,因为它们是一个请求对应的一个生命周期。config和组件servlet是一对一的关系,而登录和查询是不同的servlet所以数据不共用,而且config没有读取变量的能力。tomcat内只有一个对象,context跟servlet是一多的关系,而每个人登录传递的账号都是code=“zhangsan”的数据,其中key值都是一样,存入context有冲突。
2)什么是cookie和session?
cookie存在游览器器上,服务器压力小,但数据不安全(顾客可以改会员卡里面的信息)
-session存在服务器上,服务器压力大,但数据安全。
3)什么场景适用于session?什么场景适用于cookie?
-重要数据存session
-一般数据存cookie
温馨提示:本人初学java者,如有不对敬请指出,谢谢!

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。

快来与我一起学习吧~技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。

快来与我一起学习吧~ http://www.jnshu.com/login/1/28836439

视频:

PPT链接 视频链接

更多内容,可以加入IT交流群565734203与大家一起讨论交流

这里是技能树·IT修真院:https://www.jnshu.com,初学者转行到互联网的聚集地

猜你喜欢

转载自blog.csdn.net/jnshu_it/article/details/84898032