1.字符串(String)
用途:
字符串是 Redis 最基本的数据类型,可以存储任何形式的文本,
如JSON、XML或简单的字符串值。
它常用于缓存用户会话、计数器、缓存数据库查询结果等。
操作:
字符串类型支持设置(SET
)、获取(GET
)、删除(DEL
)、自增(INCR
)、自减(DECR
)、追加(APPEND
)等操作:
-
设置值:SET key value
-
获取值:GET key
-
设置过期时间:EXPIRE key timeout
-
删除键:DEL key
-
批量设置值:MSET key1 value1 key2 value2 ...
-
批量获取值:MGET key1 key2 ...
-
自增/自减:INCR key / DECR key 或 INCRBY key increment / DECRBY key decrement
特性:
字符串类型是动态字符串,可以修改内容,并且最大长度为512MB。
2.列表(List)
用途:
列表是一个简单的字符串列表,按照插入顺序排序。
列表常用于实现消息队列或执行原子推入或弹出操作。
操作:
列表类型支持从两端推入元素(LPUSH
、RPUSH
)、弹出元素(LPOP
、RPOP
)、获取列表元素(LRANGE
)、获取列表长度(LLEN
)等操作。
-
在头部插入元素:LPUSH key value1 [value2] ...
-
在尾部插入元素:RPUSH key value1 [value2] ...
-
获取列表指定范围内的元素:LRANGE key start stop
-
移除并获取列表头部元素:LPOP key
-
移除并获取列表尾部元素:RPOP key
-
获取列表长度:LLEN key
特性:
列表是双向链表结构,支持从头部或尾部进行O(1)时间复杂度的弹出和推入操作。
3.集合(Set)
用途:
集合是一个无序集合,自动处理重复元素。
集合常用于实现交集、并集、差集等操作,例如,用于标签系统、用户关注列表等。
操作:
集合类型支持添加元素(SADD
)、移除元素(SREM
)、获取集合中的元素(SMEMBERS
)、检查元素是否存在(SISMEMBER
)等操作。
-
添加成员:SADD key member1 [member2] ...
-
获取集合中的所有成员:SMEMBERS key
-
判断成员是否存在于集合中:SISMEMBER key member
-
删除集合中的一个或多个成员:SREM key member1 [member2] ...
-
返回给定所有集合的交集:SINTER key1 [key2] ...
-
返回所有给定集合的并集:SUNION key1 [key2] ...
Redis:0>sadd empno 8000
"1"
Redis:0>sadd empno 8001
"1"
Redis:0>sadd empno 8002
"1"
Redis:0>sadd empno 8003 8004 8005
"3"
Redis:0>smembers empno
1) "8000"
2) "8001"
3) "8002"
4) "8003"
5) "8004"
6) "8005"
Redis:0>sadd empno 8001
"0"
Redis:0>smembers empno
1) "8000"
2) "8001"
3) "8002"
4) "8003"
5) "8004"
6) "8005"
Redis:0>scard empno
"6"
Redis:0>sismembers empno 8000
"ERR unknown command 'sismembers'"
Redis:0>sismember empno 8000
"1"
Redis:0>sismember empno 8001
"1"
Redis:0>srem empno 8000 80001
"1"
Redis:0>smembers empno
1) "8001"
2) "8002"
3) "8003"
4) "8004"
5) "8005"
Redis:0>spop empno
"8001"
Redis:0>smember empno
"ERR unknown command 'smember'"
Redis:0>smembers empno
1) "8002"
2) "8003"
3) "8004"
4) "8005"
Redis:0>srandmember empno 3
1) "8003"
2) "8002"
3) "8004"
特性:
集合内部使用哈希表实现,因此添加、删除、查找元素的操作都是O(1)时间复杂度。
4.有序集合(Sorted Set)
用途:
有序集合与集合类似,但它为每个元素关联了一个分数,使得元素能够按照分数进行排序。
有序集合常用于排行榜、带权重的消息队列等场景。
操作:
有序集合类型支持添加元素(ZADD
)、移除元素(ZREM
)、根据分数或元素值获取元素排名(ZRANK
、ZREVRANK
)、获取指定分数范围内的元素(ZRANGEBYSCORE
)等操作。
-
添加成员及其分数:ZADD key score1 member1 [score2 member2] ...
-
通过索引区间返回有序集合中指定区间内的成员:ZRANGE key start stop [WITHSCORES]
-
增加指定成员的分数:ZINCRBY key increment member
-
获取有序集合中成员的分数:ZSCORE key member
-
删除有序集合中的一个或多个成员:ZREM key member [member] ...
Redis:0>select 1
"OK"
Redis:1>zadd keyword 0 "刘德华" 0 "成龙" 0 "张家辉"
"3"
Redis:1>zincrby keyword 1 "刘德华"
"1"
Redis:1>zincrby keyword 5 "成龙"
"5"
Redis:1>zincrby keyword 3 "张家辉"
"3"
Redis:1>zrevrange keyword 0 -1
1) "成龙"
2) "张家辉"
3) "刘德华"
Redis:1>zcard keyword
"3"
Redis:1>zincrby keyword 5000 "刘德华"
"5001"
Redis:1>zincrby keyword 500 "成龙"
"505"
Redis:1>zincrby keyword 3000 "张家辉"
"3003"
Redis:1>zdecrby keyword 100 "成龙"
"ERR unknown command 'zdecrby'"
Redis:1>zcount keyword 3000 5000
"1"
Redis:1>zcount keyword 5 10
"0"
Redis:1>zscore keyword "张家辉"
"3003"
Redis:1>zrangebyscore keyword 3000 5001
1) "张家辉"
2) "刘德华"
Redis:1>zrangebyscore keyword 3003 5001
1) "张家辉"
2) "刘德华"
Redis:1>zrangebyscore keyword 3000 (5001
1) "张家辉"
Redis:1>zrangebyscore keyword 3000 +inf
1) "张家辉"
2) "刘德华"
Redis:1>zrangebyscore keyword -inf 3000
1) "成龙"
Redis:1>zrevrangebyscore keyword 5001 3000
1) "刘德华"
2) "张家辉"
Redis:1>zrank keyword "张家辉"
"1"
Redis:1>zrank keywrod "刘德华"
null
Redis:1>zrank keyword "刘德华"
"2"
Redis:1>zrevrank keyword "刘德华"
"0"
Redis:1>zrem keyword "成龙","张家辉"
"2"
Redis:1>zmember keyword
"ERR unknown command 'zmember'"
Redis:1>zrevrange keyword 0 -1
1) "刘德华"
Redis:1>zremrangebyrank keyword 0 2
"1"
Redis:1>zrevrange keyword 0 -1
Redis:1>zremrangebyscore keyword -inf (5000
"0"
特性:
有序集合使用哈希表和跳跃表(skip list)实现,确保了元素的快速插入、删除和有序访问。
5.哈希(Hash)
用途:
哈希是一个键值对集合,可以存储对象。
哈希常用于存储、缓存和管理对象,例如用户信息、配置信息等。
操作:
哈希类型支持设置字段(HSET
)、获取字段(HGET
)、删除字段(HDEL
)、检查字段存在(HEXISTS
)、获取所有字段和值(HGETALL
)等操作。
-
设置哈希表中的字段值:HSET key field value
-
获取哈希表中指定字段的值:HGET key field
-
删除哈希表中的指定字段:HDEL key field [field] ...
-
获取哈希表中所有字段:HKEYS key
-
获取哈希表中所有值:HVALS key
-
获取哈希表中字段和值的数量:HLEN key
特性:
哈希内部使用哈希表实现,字段名是字符串,字段值可以是字符串或数字,
适合存储对象和映射表。