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

       

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数据库。

下面是一个简单的例程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# -*- 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使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# -*- 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。

转载请注明出处: http://blog.guoyb.com/2016/09/09/learn-redis-other/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值