一、Redis概览
Redis(Remote Dictionary Server)是一种快速的键值对数据库,保存所有数据于内存中以实现快速的读写操作。它支持丰富的数据类型,如字符串、列表、集合、有序集合和哈希表,并且提供持久化、Lua脚本编程、内置发布/订阅等特性,满足各种业务需要。
二、Redis数据类型及示例
-
字符串(String):字符串是最基本的数据类型,一个key对应一个value,主要命令有set,get,decr,incr,mget等。
示例:
set mykey somevalue get mykey -
哈希(Hash):哈希是一个键值对集,主要命令有hset,hget,hgetall等。
示例:
hset user:1 name "John" hget user:1 name -
列表(List):列表是简单的字符串列表,按插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。主要命令有lpush,rpush,lpop,rpop,lrange等。
示例:
rpush mylist A rpush mylist B lrange mylist 0 -1 -
集合(Set):集合是无序的字符串的集合,通过HashTable实现,主要命令有sadd,spop,smembers,sunion,sinter等。
示例:
sadd myset 1 sadd myset 2 smembers myset -
有序集合(Sorted Set):和set相比,zset增加了一个权重参数score,使得集合中的元素能够按score进行有序排列。主要命令有zadd,zrange,zrem,zincrby等。
示例:
zadd myzset 1 one zadd myzset 2 two zrange myzset 0 -1 withscores
三、数据持久化
Redis提供两种持久化方法:RDB和AOF。RDB方式通过在指定的时间间隔内生成数据的快照来保存数据,而AOF方式则记录服务器接收到的每一条写命令。两种方式都有各自的优点,可以根据实际需求进行选择。
例如,要设置Redis进行RDB持久化,可以在配置文件中添加如下命令:
save 900 1
save 300 10
save 60 10000
这个配置的意思是,如果900秒内有1个键值改变,或者300秒内有10个
键值改变,或者60秒内有10000个键值改变,就将数据写入磁盘。
四、键过期策略与内存管理
Redis中的每一个键都可以设置过期时间,到达设定时间后,键会被自动删除。当内存不足时,Redis可以根据设定的策略自动淘汰键。例如,可以设置最少使用(LRU)或最近最少使用(LFU)策略。
设置键的过期时间示例:
set mykey hello
expire mykey 10
这个例子设置了键mykey10秒后过期。
五、发布订阅模式
Redis的发布订阅模式允许客户端订阅一个或多个频道,然后其他客户端向这些频道发送消息,所有订阅这个频道的客户端都会收到这个消息。
发布订阅的示例:
# 客户端1:
subscribe news
# 客户端2:
publish news "Redis 6.0 is out!"
在这个例子中,客户端1订阅了news频道,当客户端2向news频道发送消息时,客户端1会收到这个消息。
六、Lua脚本
Redis支持Lua脚本,开发者可以使用Lua脚本进行复杂的事务性操作。例如,一个递增计数器可以这样实现:
eval "return redis.call('incr', KEYS[1])" 1 counter
这个Lua脚本使得counter的值递增,并返回增加后的值。
七、实战应用
Redis被广泛用于各种场景,例如作为缓存系统,消息队列系统,排行榜等等。