前言
近期回顾了Redis方面的技术,本文就redis的5大基础数据类型的指令做了一个总结并附上示例
一、Redis是什么?
Redis是一种开源的内存数据库,它被用作缓存、消息代理和键值存储。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,这使得它非常灵活且适用于各种用途。Redis的速度很快,因为它将数据存储在内存中,并且可以持久化到磁盘,确保数据在重启后不会丢失。它也支持多种语言的客户端库,这使得它在各种应用和开发环境中都很流行。
二、基础数据类型使用方法及示例
字符串 (Strings):
- 设置键的值:
SET mykey "Hello"
- 获取键的值:
GET mykey
- 设置多个键值对:
MSET key1 "value1" key2 "value2"
- 删除键:
DEL key1
- 将键的值递增1:
INCR counter
- 在键的值后追加内容:
APPEND mykey " World"
- 设置键的过期时间:
EXPIRE mykey 60
- 获取键的剩余生存时间:
TTL mykey
- 获取键值的子字符串:
GETRANGE mykey 0 3
- 获取键值的长度:
STRLEN mykey
- 获取多个键的值:
MGET key1 key2
- 设置键不存在时才设置键的值:
SETNX mykey "newvalue"
- 设置键的值并同时设置过期时间:
SETEX mykey 60 "value"
- 设置新值并返回旧值:
GETSET mykey "newvalue"
- 将键的值递增指定的步长:
INCRBY counter 5
- 将键的值递减1:
DECR counter
- 将键的值递减指定的步长:
DECRBY counter 3
- 设置位图中指定偏移量的值:
SETBIT mybitmap 7 1
- 获取位图中指定偏移量的值:
GETBIT mybitmap 7
- 统计位图中值为1的位的数量:
BITCOUNT mybitmap
哈希 (Hashes):
- 设置哈希字段的值:
HSET user:id:001 username Alice
- 获取哈希字段的值:
HGET user:id:001 username
- 设置多个哈希字段的值:
HMSET user:id:001 username Alice age 30
- 删除哈希字段:
HDEL user:id:001 age
- 获取哈希中所有字段和值:
HGETALL user:id:001
- 判断哈希字段是否存在:
HEXISTS user:id:001 username
- 获取哈希所有字段:
HKEYS user:id:001
- 获取哈希所有值:
HVALS user:id:001
- 哈希字段的值递增指定的步长:
HINCRBY user:id:001 age 5
- 获取哈希中字段的数量:
HLEN user:id:001
- 获取多个哈希字段的值:
HMGET user:id:001 username age
- 当字段不存在时设置哈希字段的值:
HSETNX user:id:001 email "alice@example.com"
- 获取哈希字段值的长度:
HSTRLEN user:id:001 username
- 迭代哈希中的元素:
HSCAN user:id:001 0 MATCH "user*"
- 哈希字段的值递增指定的浮点数步长:
HINCRBYFLOAT user:id:001 balance 10.5
- 从哈希中随机获取指定数量的字段:
HRANDFIELD user:id:001 2
- 获取哈希字段值的长度:
HSTRLEN user:id:001 username
- 迭代哈希中的元素:
HSCAN user:id:001 0 MATCH "user*"
- 哈希字段的值递增指定的浮点数步长:
HINCRBYFLOAT user:id:001 balance 10.5
- 从哈希中随机获取指定数量的字段:
HRANDFIELD user:id:001 2
列表 (Lists):
- 将一个值插入到列表的头部:
LPUSH mylist "world"
- 将一个值插入到列表的尾部:
RPUSH mylist "world"
- 移除并获取列表头部的元素:
LPOP mylist
- 移除并获取列表尾部的元素:
RPOP mylist
- 获取列表指定范围的元素:
LRANGE mylist 0 -1
- 获取列表长度:
LLEN mylist
- 通过索引获取列表元素:
LINDEX mylist 0
- 在列表中某个元素之前或之后插入值:
LINSERT mylist BEFORE|AFTER pivot value
- 移除列表中与给定值相等的元素:
LREM mylist 0 "value"
- 从列表的一个尾部或多个尾部列表移除元素并将其添加到另一个列表的头部:
RPOPLPUSH source destination
- 对列表进行修剪,保留指定范围内的元素:
LTRIM mylist 0 2
- 阻塞式的列表弹出操作:
BLPOP key [key ...] timeout
- 阻塞式的列表弹出操作:
BRPOP key [key ...] timeout
- 将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端:
RPOPLPUSH source destination
- 将列表 source 中的最后一个元素(尾元素)弹出,并插入到列表 destination 开头并返回给客户端:
BRPOPLPUSH source destination timeout
- 返回列表中指定区间内的元素,支持负数索引:
LRANGE mylist 0 -1
- 将一个或多个值插入到已存在的列表头部:
LPUSHX mylist "value1" "value2"
- 将一个或多个值插入到已存在的列表尾部:
RPUSHX mylist "value1" "value2"
- 移除并获取列表指定范围内的元素:
LTRIM mylist 0 2
- 从列表的一个尾部或多个尾部列表移除元素并将其添加到另一个列表的头部:
RPOPLPUSH source destination
集合 (Sets):
- 将一个或多个成员添加到集合中:
SADD myset "apple"
- 从集合中移除一个或多个成员:
SREM myset "apple"
- 获取集合中的所有成员:
SMEMBERS myset
- 判断成员是否属于集合:
SISMEMBER myset "apple"
- 获取集合的成员数量:
SCARD myset
- 返回多个集合的并集:
SUNION key1 key2
- 返回多个集合的交集:
SINTER key1 key2
- 返回多个集合的差集:
SDIFF key1 key2
- 移除并返回集合中的一个随机元素:
SPOP myset
- 从第一个集合移除成员并添加到另一个集合:
SMOVE source destination "apple"
- 返回指定数量的随机元素:
SRANDMEMBER myset 3
- 从集合中随机获取一个或多个元素:
SRANDMEMBER myset 2
- 移除并返回集合中的一个随机元素:
SPOP myset
- 迭代集合中的元素:
SSCAN myset cursor [MATCH pattern] [COUNT count]
- 获取多个集合的并集并存储在一个新集合中:
SUNIONSTORE destination key1 key2
- 获取多个集合的交集并存储在一个新集合中:
SINTERSTORE destination key1 key2
- 获取多个集合的差集并存储在一个新集合中:
SDIFFSTORE destination key1 key2
- 检查给定成员是否存在于集合:
SSCAN myset cursor MATCH "pattern" COUNT count
- 返回集合的基数(集合中元素的数量):
SCARD myset
- 获取指定范围的元素:
SSCAN myset cursor COUNT count
有序集合 (Sorted Sets):
- 将一个或多个成员添加到有序集合,并指定分数:
ZADD myzset 1 "one"
- 获取有序集合中指定范围的成员:
ZRANGE myzset 0 -1 WITHSCORES
- 获取有序集合中指定分数范围的成员:
ZRANGEBYSCORE myzset 0 5
- 返回有序集合中成员的排名:
ZRANK myzset "one"
- 获取有序集合中成员的分数:
ZSCORE myzset "one"
- 移除有序集合中的一个或多个成员:
ZREM myzset "one"
- 返回有序集合的成员数量:
ZCARD myzset
- 返回有序集合中指定分数范围内的成员数量:
ZCOUNT myzset 0 5
- 对有序集合中指定成员的分数进行增减操作:
ZINCRBY myzset 5 "one"
- 返回有序集合中指定范围内的成员和分数:
ZRANGE myzset 0 -1 WITHSCORES
- 返回有序集合中指定分数范围内的成员和分数:
ZRANGEBYSCORE myzset 0 5 WITHSCORES
- 获取有序集合中指定范围的成员,按分数从高到低排序:
ZREVRANGE myzset 0 -1 WITHSCORES
- 获取有序集合中指定分数范围的成员,按分数从高到低排序:
ZREVRANGEBYSCORE myzset 5 0 WITHSCORES
- 移除有序集合中指定排名范围内的成员:
ZREMRANGEBYRANK myzset 0 1
- 移除有序集合中指定分数范围内的成员:
ZREMRANGEBYSCORE myzset 0 5
总结
这些示例展示了如何使用Redis中的不同命令执行各种操作,包括设置和获取值、操作列表、集合和有序集合,以及如何管理哈希中的字段。