Redis作为一个高性能的开源键值存储系统,广泛应用于缓存、排行榜、计数器、实时消息、任务队列等场景。Redis也是一个非常灵活的数据存储系统,支持多种数据结构,包括字符串、列表、哈希、集合、有序集合等,同时也支持诸如发布/订阅、Lua扩展、事务等功能。
一、键值对命令
在Redis中,最基本的操作就是获取或设置某个键的值。键值对命令由两部分组成,键和值。
1. SET key value [EX seconds] [PX milliseconds] [NX|XX]
设置给定键的值,如果键不存在则创建新的键值对,如果键已经存在,则更新其值。此外,SET命令还可以设置过期时间、毫秒级过期时间以及只有在键不存在时才执行SET命令。
# 示例:创建新键 SET mykey "hello world" # 示例:更新已存在的键 SET mykey "goodbye" # 示例:设置过期时间 SET mykey "hello" EX 10 # 示例:设置毫秒级过期时间 SET mykey "hello" PX 10000 # 示例:只有当键不存在时才执行SET命令 SET mykey "hello" NX
2. GET key
返回给定键的值,如果键不存在,则返回nil。
# 示例:获取键值 GET mykey
3. DEL key [key ...]
删除给定键及其对应的值。
# 示例:删除键值 DEL mykey
4. EXISTS key
判断给定键是否存在,如果键存在,则返回1,否则返回0。
# 示例:判断键是否存在 EXISTS mykey
二、字符串命令
Redis中的字符串命令用于处理字符串类型的值,相比于其他数据存储系统,Redis的字符串类型支持更多的特性,例如,Redis的字符串类型可以是二进制安全的,即可以包含任意类型的数据,而且支持对字符串类型的值进行原子性的操作。
1. SETEX key seconds value
设置给定键的值,并同时设置键的过期时间。如果键已经存在,则更新其值。此外,SETEX命令还可以设置只有当键不存在时才执行SET命令。
# 示例:添加新键 SETEX mykey 10 "hello" # 示例:更新已存在的键 SETEX mykey 10 "goodbye" # 示例:只有当键不存在时才执行SET命令 SETEX mykey 10 "hello" NX
2. MSET key value [key value ...]
同时设置多个键值对,如果给定的键已经存在,则覆盖原有的值。
# 示例:同时设置多个键值对 MSET key1 "hello" key2 "world"
3. MGET key [key ...]
返回给定多个键的值。
# 示例:获取多个键的值 MGET key1 key2
4. INCR key / INCRBY key increment / DECR key / DECRBY key decrement
对给定键的值进行原子性的自增/自减操作,其中DECR命令用于对键的值进行自减操作,而DECRBY命令用于对键的值进行减去指定数值的操作。
# 示例:自增/自减操作 INCR mykey INCRBY mykey 10 DECR mykey DECRBY mykey 5
三、列表命令
列表命令用于处理列表类型的值,Redis的列表类型非常灵活,支持向列表中添加元素、获取列表中任意一个位置上的元素、获取列表中的多个元素、删除列表中指定元素等操作。
1. LPUSH key value [value ...]
往列表的开头插入一个或多个值。
# 示例:往列表开头插入多个值 LPUSH mylist "world" "hello"
2. RPUSH key value [value ...]
往列表的末尾插入一个或多个值。
# 示例:往列表末尾插入多个值 RPUSH mylist "hello" "world"
3. LINDEX key index / LLEN key
LINDEX用于返回列表中给定位置的元素,而LLEN命令返回列表的长度。
# 示例:获取列表中任意位置上的元素 LINDEX mylist 0 # 示例:获取列表长度 LLEN mylist
4. LPOP key / RPOP key
LPOP命令用于移除并返回列表的第一个元素,而RPOP命令用于移除并返回列表的最后一个元素。
# 示例:移除并返回列表的第一个元素 LPOP mylist # 示例:移除并返回列表的最后一个元素 RPOP mylist
5. LRANGE key start stop
返回列表中指定范围内的元素,其中start和stop表示列表中元素的下标,其中0表示列表的开头位置。当start和stop的值大于等于列表的长度时,Redis会自动将这两个值加以截取。
# 示例:获取列表中的多个元素 LRANGE mylist 0 2
四、哈希命令
哈希命令用于处理哈希类型的值,哈希类型类似于关系型数据库中的表,通过键来对存储多个键值对。
1. HSET key field value / HMSET key field value [field value ...]
HSET命令用于为哈希类型的键设置字段和对应的值,而HMSET命令则可以一次性为哈希类型的键设置多个字段和对应的值。
# 示例:为哈希类型键创建字段 HSET myhash field1 "hello" HMSET myhash field2 "world" field3 "redis"
2. HGET key field / HMGET key field [field ...]
HGET命令用于获取哈希类型的键指定字段的值,而HMGET命令则可以获取哈希类型键多个字段的值。
# 示例:获取指定字段的值 HGET myhash field1 # 示例:获取多个字段的值 HMGET myhash field1 field2
3. HEXISTS key field
如果给定哈希类型的键中存在指定字段,则返回1,否则返回0。
# 示例:判断是否存在指定字段 HEXISTS myhash field1
4. HDEL key field [field ...]
删除给定哈希类型键的一个或多个字段。
# 示例:删除一个字段 HDEL myhash field1 # 示例:删除多个字段 HDEL myhash field2 field3
五、集合命令
集合命令用于处理集合类型的值,集合类型类似于一个无序的数组,且其中的元素都是唯一的。
1. SADD key member [member ...]
SADD命令用于向集合中添加一个或多个元素。
# 示例:向集合中添加元素 SADD myset "hello" "world"
2. SMEMBERS key
SMEMBERS命令用于获取集合中的所有元素。
# 示例:获取集合中的所有元素 SMEMBERS myset
3. SISMEMBER key member
如果给定的元素是集合中的成员,则返回1,否则返回0。
# 示例:判断给定元素是否是集合成员 SISMEMBER myset "hello"
4. SREM key member [member ...]
SREM命令用于从集合中删除一个或多个元素。
# 示例:从集合中删除元素 SREM myset "hello"
六、有序集合命令
有序集合命令用于处理有序集合类型的值,有序集合类型类似于集合类型,但是其中的元素可以进行排序。Redis中的有序集合是通过将集合中的元素和对应的分数构建一个有序字典来实现的。
1. ZADD key score member [score member ...]
ZADD命令用于向有序集合中添加一个或多个元素,其中score用于指定元素的分数。
# 示例:向有序集合中添加元素 ZADD myzset 1 "one" 2 "two"
2. ZRANGE key start stop [WITHSCORES]
ZRANGE命令用于获取有序集合中下标在给定范围内的元素,并按照元素分数从小到大排序。如果指定了WITHSCORES选项,则同时返回元素的分数。
# 示例:获取有序集合中下标在给定范围内的元素 ZRANGE myzset 0 -1 # 示例:同时返回元素的分数 ZRANGE myzset 0 -1 WITHSCORES
3. ZREVRANGE key start stop [WITHSCORES]
ZREVRANGE命令用于获取有序集合中下标在给定范围内的元素,并按照元素分数从大到小排序。如果指定了WITHSCORES选项,则同时返回元素的分数。
# 示例:获取有序集合中下标在给定范围内的元素,按照元素分数从大到小排序 ZREVRANGE myzset 0 -1 # 示例:同时返回元素的分数 ZREVRANGE myzset 0 -1 WITHSCORES
4. ZRANK key member / ZREVRANK key member
ZRANK命令用于获取有序集合中给定元素的下标,其中下标按照元素分数从小到大排序,而ZREVRANK命令则返回下标按照元素分数从大到小排序的结果。
# 示例:获取有序集合中指定元素的下标 ZRANK myzset "one" # 示例:返回下标按照元素分数从大到小排序的结果 ZREVRANK myzset "one"
5. ZREM key member [member ...]
ZREM命令用于从有序集合中删除一个或多个元素。
# 示例:从有序集合中删除元素 ZREM myzset "one"
七、发布/订阅命令
发布/订阅命令被用于实现消息的一对多广播。在Redis中,发布者将消息发送到指定的频道,只有订阅了该频道的所有客户端才能接收到该消息。
1. PUBLISH channel message
PUBLISH命令用于向指定频道发布一条新消息