首页 > 数据库 >Redis学习笔记4-脚本、持久化和集群 Redis学习笔记1-基础命令及数据结构: http://blog.guoyb.com/2016/07/21/lear...

Redis学习笔记4-脚本、持久化和集群 Redis学习笔记1-基础命令及数据结构: http://blog.guoyb.com/2016/07/21/lear...

时间:2023-06-11 17:01:51浏览次数:63  
标签:pipe Redis redis 笔记 blog result key time


       

Redis学习笔记4-脚本、持久化和集群




Redis学习笔记1-基础命令及数据结构: http://blog.guoyb.com/2016/07/21/learn-redis-basic-commands/Redis学习笔记2-事务与过期时间: http://blog.guoyb.com/2016/08/23/learn-redis-adv/Redis学习笔记3-排序与消息通知: http://blog.guoyb.com/2016/08/24/learn-redis-adv-2/


学习笔记的第四部分记录Redis的脚本功能、持久化和集群。


脚本

在Python中使用redis-py来操作redis数据库。

下面是一个简单的例程:

# -*- coding: utf-8 -*-
import redis

r = redis.StrictRedis(host='127.0.0.1', port=6379, db=0)
r.set('foo', 'bar')
print r.get('foo')

r.hmset('dict', {'name': 'Bob'})
people = r.hgetall('dict')
print people

pipe = r.pipeline()
pipe.set('foo', 'bar')
pipe.get('foo')
result = pipe.execute()
print result

 

一个较为复杂的例子如下,配合web.py使用:

# -*- coding: utf-8 -*-

import web
import time
import redis

r = redis.StrictRedis()

urls = (
    '/', 'visit',
    '/online', 'online'
)

app = web.application(urls, globals())


def time_to_key(current_time):
    return 'active.users:' + time.strftime('%M', time.localtime(current_time))


def keys_in_last_10_minutes():
    now = time.time()
    result = []
    for i in range(10):
        result.append(time_to_key(now - i * 60))
    return result


class visit:
    def GET(self):
        user_id = web.ctx.env['HTTP_USER_AGENT']
        current_key = time_to_key(time.time())
        pipe = r.pipeline()
        pipe.sadd(current_key, user_id)
        pipe.expire(current_key, 10 * 60)
        pipe.execute()

        return 'User:\t' + user_id + '\r\nKey:\t' + current_key


class online:
    def GET(self):
        online_users = r.sunion(keys_in_last_10_minutes())
        result = ''
        for user in online_users:
            result += 'User agent:' + user + '\r\n'
        return result


if __name__ == "__main__":
    app.run()

 

这个例子用redis缓存当前在线用户信息,用户无操作10分钟后切换到下线状态。

持久化

Redis支持两种持久化方式:

  • RDB方式:采用数据快照,进行压缩,通过子进程进行后台持久化。利用写时复制(COW)进行优化,同时支持无硬盘方式(直接发送给网络传输)。
  • AOF方式:记录一系列的Redis命令。支持定时重写AOF,从而去除冗余命令。

集群

  • 支持一主多从的结构,适用于写入少(只从主数据库写入),读取多(可以从多个从数据库同步读取)的读写分离场景。
  • 主从数据库之间会自动同步数据(从主到从)。
  • 数据持久化可以放在从数据库做,从而降低主数据库负载。
  • 引入哨兵机智,监控主从数据库运行情况,实现自动重启,主从切换。多个哨兵之间还可以互相监控。
  • 支持分片,使用redis-trib.rb自动增加节点(可做重新映射,并自动迁移数据)。和mongo不同,redis集群是纯分布式的,并没有一个总控的路由进程mongos。

标签:pipe,Redis,redis,笔记,blog,result,key,time
From: https://blog.51cto.com/u_6186189/6458286

相关文章

  • Redis之Redisson原理详解
    目录1Redisson1.1简介1.2与其他客户端比较1.3操作使用1.3.1pom.xml1.3.2配置1.3.3启用分布式锁1.4大致操作原理1.5RLock1.5.1RLock如何加锁1.5.2解锁消息1.5.3锁续约1.5.4流程概括1.6公平锁1.6.1java中公平锁1.6.2RedissonFairLock1.6.3公平锁加锁步骤1Redisso......
  • 梦断代码读书笔记03
    在阅读这篇文章之前,我一直认为外国人在IT领域是领头羊,但是读完之后,我发现尽管他们实现了很多著名的项目和出色的软件,但是他们的项目管理和软件开发能力实在是有限。他们总是怀着远大的目标和宏伟的志向去开发软件,比如Chandler项目,他们希望能够提供最好的用户体验,使用最新的技术,平......
  • 01-《程序员修炼之道——从小工到专家》读书笔记
     这本书描述了一些程序员编写大型项目时所应该遵循的最基本的原则和可以使用的最基本的工具。它没有描述某一种特定的语言、特定的算法,也没有推荐一种编程方法作为万灵药,而是介绍了实用主义的思想,并介绍了一整套方法论帮助程序员与团体避免错误、避免浪费无谓的时间,更有效地开发......
  • 02-《程序员修炼之道——从小工到专家》读书笔记
    复制别人的代码时,代码中可能包含了我们并不需要的段落,或者是出现了我们并不理解的逻辑,这会导致我们的代码不够清晰、不够简洁。另外,如果我们使用之前成功的代码来解决新问题,那么我们就会变成一个只能解决管理员问题,却不能写出优秀代码的程序员。最后,当我们不写注释时,这会让后来的......
  • 03-《程序员修炼之道——从小工到专家》阅读笔记
     重写、重做和重新架构代码合起来,称为重构。那么我们该在什么时候进行重构呢?当你遇到绊脚石——代码不再合适,你注意到有两样东西其实应该合并或是其他任何对你来说是“错误”的东西,那么你不要对改动犹豫不决,应该现在就做。但往往现实世界特别复杂,当你去找你的老板和客户,对他们说......
  • 01-《梦断代码》阅读笔记
    在讲团队协作时,作者提到了一本书《大教堂与集市》。《大教堂与集市》的作者认为,重要的软件应该像建大教堂一样,由独立的巫师精心打造,在面世之前绝对不发布beta版本。而Linux采用的开发风格却像一个乱哄哄的大集市,铺陈了各种日程和手法,要从中得到一个前后一致的稳定系统,简直只能......
  • 02-《梦断代码》阅读笔记
    当人们梦想把软件变成流水线式的工作,他们常会期盼标准化的插件.新西兰学者詹姆斯.诺博尔和罗伯特.毕多有时用'后现代程序员'的笔名共同协作,他们把这梦想叫做"乐高假设":"未来,程序将由可服用的部件组合而成.软件部件将在全球范围内提供.软件工程将从编程的窠臼解放出来."从架子......
  • 03-《梦断代码》阅读笔记
    BM执行强制进度纪律的成功基于两条原则:1)计划是强制性的2)计划必须符合现实情况----“从底向上”,依据那些负责按计划执行的程序员的经验和知识而来,而不是“从顶至下”,靠管理者拍脑袋或对市场的期望而来。没有任何一种方法论能够覆盖软件项目的广大领域;结构化编程、改进组织代码......
  • 读书笔记六
    终于有幸拜读了《人月神话》这部业内经典著作。整体来说,本书的主线——人月神话、没有银弹在现今的软件工程管理领域依然属于有效的基础理论。不过有些东西确实过时了,比方说文档的管理,现在已经有了svn或者在线文档。提到调试的复杂性,现在的集成环境把调试变得非常容易。读完之后才......
  • Linux命令行与shell脚本编程大全学习笔记
    理解Linux文件权限执行ls-l命令获取当前目录下所有文件、目录和设备的权限。显示的列表字段分别为:文件类型,比如目录(d)、文件(-)、字符型文件(c)或块设备(b);文件的权限;文件的硬链接总数;文件属主的用户名;文件属组的组名;文件的大小(以字节为单位);文件的上次修改时间;文件名或目录名。输出......