Redis 使用
Redis 就是把数据存储在内存中,这样访问速度快,但是断电后数据会丢失,所以一般用于缓存
Redis 数据结构
Redis 是一个 key-value 存储系统。Redis 中有八种数据结构,分别是字符串(String),哈希(Hash),列表(List),集合(Set),有序集合(Sorted Set),GEO,HyperLogLog,Bitmap
使用最多的就是字符串(String),哈希(Hash),列表(List)
Redis 通用命令
# 选择数据库
select 序号(0-16)
# 查看所有key
keys *
# 查看key是否存在
exists key
# 删除key
del key
# 设置key的过期时间 (单位秒)
expire key seconds
# 查看key的过期时间
ttl key
# 查看key的类型
type key
# 删除当前数据库全部key
flushdb
# 删除所有数据库全部key
flushall
String 结构
String 类型 就是字符串类型,是最常用的数据结构
SET
- 添加或者修改已经存在的一个 String 类型的键值对
# 设置key的值
set key value
# 设置key的值,如果key存在则不设置
setnx key value
# 设置key的值,并设置过期时间 时间秒
setex key seconds value
# 设置key的值,并设置过期时间 时间毫秒
psetex key milliseconds value
MSET
- 设置多个 key-value
# 设置多个key-value
mset key1 value1 key2 value2
MGET
- 获取多个 key 的值
# 获取多个key的值
mget key1 key2
GET
- 获取一个 String 类型的键值对
# 获取key的值
get key
# 将键key的值为value,并返回设置前的旧值,若没有旧值返回nil
getset key value
# 获取指定中间部分序号的值
getrange key start end
DEL
- 删除一个 key-value
# 删除key
del key
STRLEN
- 获取 key 的长度
# 获取key的长度
strlen key
插入
如果键 key 存在并且值是⼀个字符串,则把 value 追加到现有值的末尾。
返回追加 value 之后该 value 的⻓度。
如果 key 不存在,则将 key 的值设置为 value。
APPEND key value
偏移插入
从偏移量 offset 开始⽤ value 字符串覆盖键 key 存储的原字符串。offset 从 0 开始 返回修改后新的 value 字符串的⻓度。
SETRANGE key offset value
让一个 key 值自增或自减
- 值就是一个数字
# 将key的值加1
incr key
# 将key的值减1
decr key
# 将key的值加n
incrby key n
# 将key的值减n
decrby key n
让一个 keu 值添加指定的值
# 将键key存储的数字值value加上/减去⼀个increment/decrement的量。
# 若key不存在则值先初始化为0再加/减。
# 若key存储的值不能被解释为数字,则返回错误。
# 增加 指定的值
INCRBY key increment
# 减少 指定的值
DECRBY key decrement
# 将键key存储的浮点数值value加上⼀个increment的增量。
# 若key不存在则值先初始化为0再加/减。
# 若key存储的值不能被解释为数字,则返回错误。
# 增加 指定的浮点数
INCRBYFLOAT key increment
LIST 结构
List 类型 是一个数组,可以用来存储列表数据
LPUSH
- 将一个或多个值插入到列表头部
# 将一个或多个值插入到列表头部
LPUSH key value1 value2 value3 ...
LPUSHX
- 仅当 key 存在并且是一个列表的时候才执行 LPUSH 操作
LPUSHX key value1 value2 value3 ...
RPUSH
- 将一个或多个值插入到列表尾部
# 将一个或多个值插入到列表尾部
RPUSH key value1 value2 value3 ...
RPUSHX
- 仅当 key 存在并且是一个列表的时候才执行 RPUSH 操作
RPUSHX key value1 value2 value3 ...
LPOP
- 移除并返回列表的第一个元素
# 移除并返回列表的第一个元素
LPOP key
RPOP
- 移除并返回列表的最后一个元素
# 移除并返回列表的最后一个元素
RPOP key
LINDEX
- 通过索引获取列表中的元素
# 通过索引获取列表中的元素
LINDEX key index
LLEN
- 获取列表长度
# 获取列表长度
LLEN key
LREM
- 移除列表 key 中与 element 相等的 count 个元素,返回被移除的元素的数量
# 移除列表key中与element相等的count个元素,返回被移除的元素的数量
LREM key count value
LTRIM
- 通过下标截取指定长度
# 通过下标截取指定长度
LTRIM key start stop
RPOPLPUSH
- 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
# 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
RPOPLPUSH source destination
LSET
- 通过索引设置列表元素的值
# 通过索引设置列表元素的值
LSET key index value
LINSERT
- 在列表的元素前或者后插入元素
# 在列表的元素前或者后插入元素
LINSERT key BEFORE|AFTER pivot value
Hash 结构
Hash 类型 是一个哈希表,可以用来存储对象
HSET
- 设置一个字段的值 Key 是表名,field 是属性名,value 是字段值
# 设置一个字段的值
HSET key field value
HSETNX
- 设置一个字段的值,如果字段存在则不设置
# 设置一个字段的值,如果字段存在则不设置
HSETNX key field value
HMSET
- 设置多个字段的值
# 设置多个字段的值
HMSET key field1 value1 field2 value2 ...
HMGET
- 获取多个字段的值
# 获取多个字段的值
HMGET key field1 field2 ...
HGET
- 获取一个字段的值
# 获取一个字段的值
HGET key field
HGETALL
- 获取所有字段的值
# 获取所有字段的值
HGETALL key
HDEL
- 删除一个或多个字段
HDEL key field1 field2 ...
HEXISTS
- 判断字段是否存在
# 判断字段是否存在
HEXISTS key field
HLEN
- 获取字段的数量
# 获取字段的数量
HLEN key
HINCRBY
- 对一个字段增加指定的值
HINCRBY key field increment
HINCRBYFLOAT
- 对一个字段增加指定的浮点数
HINCRBYFLOAT key field increment
HKEYS
- 获取所有字段
# 获取所有字段
HKEYS key
HVALS
- 获取所有值
HVALS key
Set 结构 (了解)
Set 类型 是一个集合,可以用来存储集合数据
SADD
- 添加一个或多个元素到集合中
# 添加一个或多个元素到集合中
SADD key member1 member2 ...
SREM
- 移除一个或多个元素
SREM key member1 member2 ...
SMEMBERS
- 获取所有元素
# 获取所有元素
SMEMBERS key
SISMEMBER
- 判断元素是否存在
# 判断元素是否存在
SISMEMBER key member
SCARD
- 获取集合的元素个数
SCARD key
SPOP
- 随机移除一个元素
SPOP key
SRANDMEMBER
- 随机获取一个元素
SRANDMEMBER key
SMOVE
- 将一个元素从一个集合移动到另一个集合
SMOVE source destination member
SINTER
- 获取差集
SINTER key1 key2 ...
SUNION
- 获取并集
SUNION key1 key2 ...
SDIFF
- 获取交集
SDIFF key1 key2 ...
ZSET 结构 (了解)
ZSet 类型 是一个有序集合,可以用来存储有序数据
ZADD
- 添加一个或多个元素到有序集合中
# 添加一个或多个元素到有序集合中
ZADD key score1 member1 score2 member2 ...
ZREM
- 移除一个或多个元素
# 移除一个或多个元素
ZREM key member1 member2 ...
ZRANGE
- 获取所有元素
# 获取所有元素
ZRANGE key start stop [WITHSCORES]
ZRANGEBYSCORE
- 获取指定分数范围内的元素
# 获取指定分数范围内的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZREVRANGE
- 获取所有元素,按照分数从大到小排序
# 获取所有元素,按照分数从大到小排序
ZREVRANGE key start stop [WITHSCORES]
ZREVRANGEBYSCORE
- 获取指定分数范围内的元素,按照分数从大到小排序
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
ZRANK
- 获取元素的排名
# 获取元素的排名
ZRANK key member
ZREVRANK
- 获取元素的排名,按照分数从大到小排序
# 获取元素的排名,按照分数从大到小排序
ZREVRANK key member
ZSCORE
- 获取元素的分数
# 获取元素的分数
ZSCORE key member
ZINCRBY
- 对元素的分数增加指定的值
# 对元素的分数增加指定的值
ZINCRBY key increment member
ZCARD
- 获取集合的元素个数
# 获取集合的元素个数
ZCARD key
ZCOUNT
- 获取指定分数范围内的元素个数
# 获取指定分数范围内的元素个数
ZCOUNT key min max
ZREMRangeByRank
- 移除指定排名范围内的元素
# 移除指定排名范围内的元素
ZREMRANGEBYRANK key start stop
ZREMRangeByScore
- 移除指定分数范围内的元素
# 移除指定分数范围内的元素
ZREMRANGEBYSCORE key min max
ZUNIONSTORE
- 获取并集
# 获取并集
ZUNIONSTORE destination numkeys key1 key2 ...
ZINTERSTORE
- 获取交集
# 获取交集
ZINTERSTORE destination numkeys key1 key2 ...
流(Streams) (了解)
Redis Streams 是 Redis 5.0 引入的一种新的数据结构,用于处理实时数据流。它提供了一种高效的方式来处理实时数据,例如日志、事件、消息等。
XADD
- 添加一个或多个元素到流中
# 添加一个或多个元素到流中
XADD key ID * field1 value1 field2 value2 ...
XREAD
- 从流中读取数据
# 从流中读取数据
XREAD [COUNT count] [BLOCK milliseconds] STREAMS key1 key2 ... ID1 ID2 ...
XREADGROUP
- 从流中读取数据,并支持消费者组
# 从流中读取数据,并支持消费者组
XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] STREAMS key1 key2 ... ID1 ID2 ...
XACK
- 确认消息已经被处理
# 确认消息已经被处理
XACK key group ID1 ID2 ...
XPENDING
- 获取待处理的消息
# 获取待处理的消息
XPENDING key group [start end count]
XDEL
- 删除一个或多个元素
# 删除一个或多个元素
XDEL key ID1 ID2 ...
XTRIM
- 修剪流中的元素
# 修剪流中的元素
XTRIM key MAXLEN count
XINFO
- 获取流的信息
# 获取流的信息
XINFO STREAM key
XINFO GROUPS
- 获取消费者组的信息
# 获取消费者组的信息
XINFO GROUPS key
XINFO CONSUMERS
- 获取消费者组中的消费者信息
# 获取消费者组中的消费者信息
XINFO CONSUMERS key group
位图(Bitmaps) (了解)
Redis 提供了位图数据结构,可以用来存储二进制数据。位图是一种紧凑的数据结构,可以用来表示布尔值、计数器等。
SETBIT
- 设置一个位的值
# 设置一个位的值
SETBIT key offset value
GETBIT
- 获取一个位的值
GETBIT key offset
BITCOUNT
- 统计位图中 1 的个数
# 统计位图中1的个数
BITCOUNT key [start end]
BITOP
- 对多个位图进行位运算
# 对多个位图进行位运算
BITOP operation destkey key1 key2 ...
BITPOS
- 获取位图中第一个 0 或 1 的位置
# 获取位图中第一个0或1的位置
BITPOS key bit [start end]
HyperLogLog (了解)
Redis 提供了 HyperLogLog 数据结构,可以用来进行基数统计。基数统计是指统计一个集合中不重复的元素个数。
PFADD
- 添加一个或多个元素到 HyperLogLog 中
# 添加一个或多个元素到 HyperLogLog 中
PFADD key element1 element2 ...
PFCOUNT
- 获取 HyperLogLog 中的元素个数
# 获取 HyperLogLog 中的元素个数
PFCOUNT key1 key2 ...
PFMERGE
- 合并多个 HyperLogLog
# 合并多个 HyperLogLog
PFMERGE destkey sourcekey1 sourcekey2 ...
地理位置(Geospatial) (了解)
Redis 提供了地理位置数据结构,可以用来存储地理位置信息,并进行地理位置相关的操作。
GEOADD
- 添加一个或多个地理位置信息
# 添加一个或多个地理位置信息
GEOADD key longitude latitude member [longitude latitude member ...]
GEOPOS
- 获取一个或多个地理位置信息
GEOPOS key member [member ...]
GEODIST
- 获取两个地理位置之间的距离
# 获取两个地理位置之间的距离
GEODIST key member1 member2 [unit]
GEORADIUS
- 获取指定范围内的地理位置信息
# 获取指定范围内的地理位置信息
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
GEORADIUSBYMEMBER
- 获取指定范围内的地理位置信息,以某个成员为中心
# 获取指定范围内的地理位置信息,以某个成员为中心
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
GEOHASH
- 获取地理位置的 geohash 值
# 获取地理位置的 geohash 值
GEOHASH key member [member ...]
位域(Bitfields) (了解)
BITFIELD 是 Redis 5.0 引入的一种新的数据结构,可以用来存储位域数据。位域是一种紧凑的数据结构,可以用来表示布尔值、计数器等。
BITFIELD
- 对位域进行操作
# 对位域进行操作
BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
BITFIELD_RO
- 对位域进行只读操作
# 对位域进行只读操作
BITFIELD_RO key [GET type offset] [GET type offset]
Redis 事务
Redis 事务是一组命令的集合,可以保证这些命令在执行时不会被其他命令打断。Redis 事务提供了一种原子性的操作方式,可以用来保证数据的一致性。
MULTI
- 开始一个事务
# 开始一个事务
MULTI
EXEC
- 执行事务中的命令
# 执行事务中的命令
EXEC
DISCARD
- 放弃事务中的命令
# 放弃事务中的命令
DISCARD
WATCH
- 监视一个或多个键,如果在事务执行之前这些键的值发生了变化,那么事务将被放弃
# 监视一个或多个键,如果在事务执行之前这些键的值发生了变化,那么事务将被放弃
WATCH key1 key2 ...
UNWATCH
- 取消对键的监视
UNWATCH key1 key2 ...
实例
# 客户端1先执行
127.0.0.1:6379> watch k1
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set k1 100
QUEUED
127.0.0.1:6379> set k2 1000
QUEUED
# 只是入队列,但是不提交事务执行
# 客户端2后执行
127.0.0.1:6379> set k1 200
OK
# 客户端1再执行
127.0.0.1:6379> EXEC
(nil)
127.0.0.1:6379> get k1
"200"
127.0.0.1:6379> get k2
(nil)
# 此时说明事务已经被取消了,这次提交的所有命令都没有执行