Redis火热抢先看经典篇(redis经典集锦)
Redis火热抢先看:经典篇
Redis是一个基于内存的高性能键值存储系统,已经成为了Web领域很重要的组件,用于缓存、消息队列、排序、计数等场景。在这里,我们来了解一下Redis的一些经典用法。
一、缓存
Redis最常见的用途就是当做缓存,可以将一些频繁读取的数据放入Redis缓存中。Redis可以使用不同的数据结构存储,如字符串、哈希表、列表等,可以根据实际需求选择相应的数据结构。下面是一个简单的Java代码实现:
“`java
Jedis jedis = new Jedis(“localhost”);
// 写缓存
String key = “user:1”;
String value = “{\”id\”:1,\”name\”:\”Tom\”,\”age\”:18}”;
jedis.set(key, value);
// 读缓存
String result = jedis.get(key);
二、发布-订阅模式
Redis支持发布-订阅模式,订阅者可以订阅多个频道,发布者通过发布消息到某个频道,所有订阅该频道的客户端都将接收到该消息。下面是一个Python代码实现:
```pythonimport redis
r = redis.Redis(host='localhost', port=6379, db=0)# 订阅频道
pubsub = r.pubsub()pubsub.subscribe('channel1')
# 发布消息r.publish('channel1', 'Hello World')
# 接收消息for message in pubsub.listen():
print(message)
三、分布式锁
在分布式环境下,如果多个客户端对同一份数据进行操作,就需要对其进行加锁,以保证数据的一致性和安全性。可以使用Redis进行分布式锁的实现。下面是一个Java代码实现:
“`java
Jedis jedis = new Jedis(“localhost”);
// 获取锁
String key = “lock:user:1”;
String value = “1”;
String nx = jedis.set(key, value, “NX”, “PX”, 10000);
if (nx != null && nx.equalsIgnoreCase(“OK”)) {
try {
// 业务处理
} finally {
// 释放锁
jedis.del(key);
}
} else {
// 获取锁失败
}
四、限流器
Redis还可以用作限流器,可以限制某个操作在一定时间窗口内的请求次数,以保护系统免受恶意请求的攻击。下面是一个Python代码实现:
```pythonimport redis
import time
r = redis.Redis(host='localhost', port=6379, db=0)# 限流器
def rate_limiter(redis_conn, key, limit, window): ts = int(time.time() * 1000)
with redis_conn.pipeline(transaction=True) as pipe: pipe.zremrangebyscore(key, 0, ts - window)
pipe.zadd(key, {ts: ts}) pipe.zcard(key)
pipe.expire(key, window * 2) _, _, count, _ = pipe.execute()
if count > limit: return False
return True
# 请求入口def process_request(request):
if not rate_limiter(r, 'req:rate:limit', 100, 1000): return '请求太频繁了,请稍后再试!'
# 处理请求
以上是Redis的一些经典用法,希望能够对读者有所帮助。当然,Redis还有很多其他的用法,可以根据实际需求来选择使用。