达能力红色魔力Redis 表达潜能(redis 的表)
达能力红色魔力:Redis 表达潜能
Redis,是一个开源的基于内存的数据结构存储系统,缓存数据亦是它一大特点,它的速度比传统数据库操作速度要快得多。Redis 不仅仅是一个存储系统,归功于其强大灵活的数据类型和命令集,还可以用来做消息队列、分布式锁、解决用户访问限制等各种有趣的功能。本文将着重介绍 Redis 基本数据结构及使用场景。
Redis 数据类型:
– String: 字符串,一般用于存储单个 key-value 对,支持多种自增增量操作。
– Hash: 散列,一般用于存储对象,对象的属性名和属性值以 key-value 形式存储在 hash 中。
– List: 列表,支持列表插入、删除、普通队列操作(FIFO)和堆栈操作(LIFO),可以用于存储多个对象(一个列表可以存放多个对象)。
– Set: 集合,支持唯一性和无序性,一般用于去重和交并差集操作。
– Sorted Set: 有序集合,可以对集合中元素进行排序。
Redis 常用命令:
– SET key value [EX seconds] [PX milliseconds] [NX|XX]: 设置一个带有过期时间或不带有过期时间的字符串类型的值。
– GET key: 获取对应 key 的值。
– HSET key field value: 设置散列类型 key 对应 field 的值为 value。
– HGET key field: 获取散列类型 key 对应 field 的值。
– LPUSH key value: 左端插入一个值为 value 的对象。
– RPUSH key value: 右端插入一个值为 value 的对象。
– LPOP key: 左端弹出一个对象。
– RPOP key: 右端弹出一个对象。
– SADD key member: 向集合 key 中添加成员 member。
– SREM key member: 从集合 key 中删除成员 member。
– SMEMBERS key: 返回集合 key 中所有成员。
使用 Redis 实现一个访问限制功能:
本例子中使用 Redis 的 Hash 格式来存储 IP 访问次数信息,采用 setnx 和 incr 命令实现原子性的访问次数自增操作,其中 setnx 用来初始化访问次数并设置过期时间(60秒),incr 命令用于自增访问次数。
“`python
import redis
conn = redis.Redis()
def is_valid_ip(ip_addr):
“””
判断 IP 地址是否可以进行访问
“””
ip_key = f”ip:{ip_addr}”
ip_count = conn.get(ip_key)
if not ip_count:
conn.setex(ip_key, 60, 1)
return True
elif int(ip_count)
conn.incr(ip_key)
return True
else:
return False
本文重点介绍了 Redis 基本数据结构及一些常用命令,Redis 还有很多有趣的功能待我们去探索,比如发布/订阅模式、Lua 脚本等等。使用 Redis 可以大幅度提高程序的性能,并且 Redis 已经成为很多高并发系统的必备组件之一。