Overview of RU202
- https://github.com/redislabs-training/ru202
- https://redis.io/topics/streams-intro
Welcome to RU202
此课程的前提是RU101。
申请一个免费的云端Redis,即Redis Cloud Essentials,参见这里
Redis Cloud Essentials适用于开发环境或低吞吐量应用,其特点为:
- 30MB 存储,无需信用卡
- 关键企业级特性
- 新功能: RediSearch 2, RedisGraph, RedisJSON, RedisBloom, and RedisTimeSeries modules are now available for free
- 开发工具,包括RedisInsight GUI
邮件注册,并在邮件中激活。然后需要在AWS,Azure和GCS中选择一个,然后选择region,最后选择free tier,输入一个subscribtion name即可完成。
选择了AWS新加坡数据中心。
Endpoint:redis-11496.c1.ap-southeast-1-1.ec2.cloud.redislabs.com:11496
Default User Password = WnSW5OD*******
然后就可以连接了:
$ redis-cli -h redis-11496.c1.ap-southeast-1-1.ec2.cloud.redislabs.com -p 11496 -a <password>
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
redis-11496.c1.ap-southeast-1-1.ec2.cloud.redislabs.com:11496> info
# Server
redis_version:6.0.5
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:0000000000000000000000000000000000000000
redis_mode:standalone
os:Linux 4.4.0-1066-aws x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:5.4.0 20160609
process_id:10153476
run_id:9c1080511e10afa2e050fd3c1c71cdf590511a32
tcp_port:11496
uptime_in_seconds:13371
uptime_in_days:0
hz:10
lru_clock:0
config_file:
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:1955984
used_memory_human:1.86M
used_memory_rss:1955984
used_memory_peak:2832672
used_memory_peak_human:2.70M
used_memory_lua:37888
mem_fragmentation_ratio:1
mem_allocator:jemalloc-5.1.0
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1611279033
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats
total_connections_received:2
total_commands_processed:4
instantaneous_ops_per_sec:2
total_net_input_bytes:2005444
total_net_output_bytes:13739716
instantaneous_input_kbps:0.16
instantaneous_output_kbps:1.90
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:0.00
used_cpu_user:0.00
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
# Cluster
cluster_enabled:0
# Keyspace
redis-11496.c1.ap-southeast-1-1.ec2.cloud.redislabs.com:11496>
Introduction to Distributed Systems
REDIS即REmote DIctionary Server
Redis是分布式系统中的一个组件,C/S结构也是分布式系统。
Leslie B. Lamport,分布式系统专家。
A distributed system is one in which the failure of a computer you didn’t even know existed can render your own computer unusable
分布式系统不仅包括组件,还包括组件之间的通信,如消息,类似于Kafka。
- 组件越多,错误几率越大。
- 有状态的组件更可靠,如数据库,存储
- 容器和虚机使得错误组件易于替换
Stream Processing
什么是流式处理:
- 实时操作数据
- 处理持续的数据(stream)
- 例如温度监测,降到0度以下报警
例如apache storm 和 kafka都是流式处理系统。
流式处理的好处:
- 处理最近数据
- 实时洞察
- 平缓数据接入
流式处理场景:
- 时序数据
- 连续数据流
- 数据太大,无法置入内存
- 流式数据的聚合与汇总
1.4 Stream Pipelines
data source - data stream - data processing - data sink
Introduction to Redis Streams
Redis Streams Overview
redis stream的特点:
- 是一种新数据结构,2018年,5.0版本引入。类似于hash数据类型(因为可以有多个subkey)
- 类似于尾部追加的list,也就是有序的,并且顺序不可改变
- list中的每一个entry都有哈希值
- entry有唯一ID,格式为timestamp加序列号
- 支持基于ID的范围查询
- 支持consumer group,即多个消费者组成的group,共同消费stream,但不能重复消费。
Comparison to Standard Redis Data Structures
3个维度:
- Blocking还是Non-Blocking: 从stream读取数据时,可选择阻塞或非阻塞
- Mutability还是immutability:后者,不可改变,只能从尾部添加元素,元素本身也不可改变。但是你可以删除列表中的元素
- Storage和Delivery: 存储当然是在内存中。Delivery可以看下和Pub/Sub的对比,客户端在重新连到stream时,可以接受到以前的信息,而pub/sub不可以。
Redis Streams Example in Python
每次运行前需激活虚拟环境:
cd ru202
python3 -m venv env
. env/bin/activate