🔥个人主页:北极的代码(欢迎来访)
🎬作者简介:java后端学习者
❄️个人专栏:苍穹外卖日记SSM框架深入JavaWeb
命运的结局尽可永在,不屈的挑战却不可须臾或缺!

前言:前面我们实现了项目的诸多功能,这里我们将实现项目的另一些功能,不过要学习一些前置知识--Redis

什么是Redis?

Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value存储系统。

核心特点

内存存储与持久化

数据主要存储在内存中,读写速度极快(每秒可处理10万+次读写操作)

支持RDB和AOF两种持久化方式,防止数据丢失

丰富的数据类型

不仅仅是简单的key-value存储

支持字符串、哈希、列表、集合、有序集合等多种数据结构

高可用与分布式

支持主从复制、哨兵模式实现高可用

支持Redis Cluster实现分布式集群

原子性操作所有Redis操作都是原子性的,支持事务

既然知道了Redis是什么,那我们就可以直接去安装Redis了。

redis的安装非常简单,我们从官网上直接下载对应的压缩包,然后放在自己能找到的目录下解压,这样就算是安装完成了

官网:https://redis.io
中文网:https://www.redis.net.cn/

解压之后的目录如下:

解压完成之后,我们将启动Redis

直接在当前目录的窗口,输入cmd 回车,打开命令行,敲入 redis-server.exe redis.windows.conf(我们可以不用敲全,可以直接用tab键自动关联)

如图所示就是启动成功了,如果要停止,直接CTRL+C即可。

启动成功之后,我们就需要客户端来连接一下Redis服务,这时我们敲入cmd,重新进入一个命令行,然后输入redis-cli.exe,之后显示连接到本地的redis服务,端口号是6379,如果我们要退出客户端,我们直接在命令行中输入exit即可。我们也可以通过 -h -p 来指定连接哪个地方的服务(本地),以及指定端口。

补充:

Redis客户端是指连接和使用Redis服务器的程序或工具。可以这样理解:

  • Redis服务器:像一家银行,负责存储数据和提供服务

  • Redis客户端:像银行的客户,通过特定方式(窗口、ATM、手机App)与银行交互

由于Redis本身没有设置密码,为了安全起见,我们可以手动的为redis设置密码,这时我们关掉所有命令行,打开解压目录下的redis.windows.conf配置文件,这时我们只需用记事本打开,里面有一千多行的代码,我们直接用CTRL+F搜索:pass 

由于#是注释的作用,我们要设置密码,就把前面的#删掉,把foobared替换成自己的密码即可。

上面我们使用命令行方式连接redis,用的不是很方便。

我们有直接的图形化界面可以使用,

redis安装和连接之后,我们来具体的了解redis的内容:

五种常用数据类型:

Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:

类型 说明 最大存储 底层实现 适用场景
String 字符串 512MB SDS(简单动态字符串) 缓存、计数器、分布式锁
Hash 哈希表 2^32-1个字段 ziplist / hashtable 对象存储、用户信息
List 列表 2^32-1个元素 quicklist 消息队列、时间轴
Set 集合 2^32-1个元素 intset / hashtable 标签系统、去重
Sorted Set 有序集合 2^32-1个元素 ziplist / skiplist 排行榜、延迟队列

Redis的常用命令:

String(字符串)类型命令

1. 基础操作
命令 语法 说明 时间复杂度 示例
SET SET key value [NX|XX] [EX seconds] 设置值 O(1) SET name "张三" NX EX 60
GET GET key 获取值 O(1) GET name
MSET MSET key1 value1 key2 value2 批量设置 O(N) MSET k1 v1 k2 v2
MGET MGET key1 key2 批量获取 O(N) MGET k1 k2
GETSET GETSET key value 设置新值返回旧值 O(1) GETSET count 10
SETNX SETNX key value 不存在才设置 O(1) SETNX lock:1 "locked"
SETEX SETEX key seconds value 设置并指定过期 O(1) SETEX code 60 "123456"
PSETEX PSETEX key ms value 毫秒级过期 O(1) PSETEX token 5000 "abc"

2. 数值操作
命令 语法 说明 时间复杂度 示例
INCR INCR key 递增1 O(1) INCR page_view
INCRBY INCRBY key increment 增加指定值 O(1) INCRBY score 5
INCRBYFLOAT INCRBYFLOAT key increment 浮点数递增 O(1) INCRBYFLOAT price 10.5
DECR DECR key 递减1 O(1) DECR stock
DECRBY DECRBY key decrement 减少指定值 O(1) DECRBY quantity 3
3. 字符串操作
命令 语法 说明 时间复杂度 示例
APPEND APPEND key value 追加字符串 O(1) APPEND msg " world"
STRLEN STRLEN key 获取长度 O(1) STRLEN content
GETRANGE GETRANGE key start end 截取子串 O(N) GETRANGE text 0 5
SETRANGE SETRANGE key offset value 覆盖指定位置 O(1) SETRANGE name 2 "aa"
STRALGO STRALGO LCS key1 key2 最长公共子串 O(N) STRALGO LCS str1 str2
4. 位图操作
命令 语法 说明 时间复杂度 示例
SETBIT SETBIT key offset value 设置位 O(1) SETBIT bits 10 1
GETBIT GETBIT key offset 获取位 O(1) GETBIT bits 10
BITCOUNT BITCOUNT key [start end] 统计1的个数 O(N) BITCOUNT user:1:sign
BITOP BITOP operation dest key1 key2 位运算 O(N) BITOP AND result bits1 bits2
BITPOS BITPOS key bit [start end] 查找位位置 O(N) BITPOS bits 1

Hash(哈希)类型命令

1. 字段操作
命令 语法 说明 时间复杂度 示例
HSET HSET key field value 设置字段 O(1) HSET user:1 name "张三"
HSETNX HSETNX key field value 字段不存在才设置 O(1) HSETNX user:1 email "a@b.com"
HGET HGET key field 获取字段 O(1) HGET user:1 name
HMSET HMSET key field1 val1 field2 val2 批量设置 O(N) HMSET user:1 name "张三" age 25
HMGET HMGET key field1 field2 批量获取 O(N) HMGET user:1 name age
HDEL HDEL key field1 field2 删除字段 O(N) HDEL user:1 email phone
2. 批量操作
命令 语法 说明 时间复杂度 示例
HGETALL HGETALL key 获取所有字段和值 O(N) HGETALL user:1
HKEYS HKEYS key 获取所有字段名 O(N) HKEYS config
HVALS HVALS key 获取所有字段值 O(N) HVALS product:1
HLEN HLEN key 获取字段数量 O(1) HLEN cart:123
HEXISTS HEXISTS key field 判断字段是否存在 O(1) HEXISTS user:1 email
3. 数值操作
命令 语法 说明 时间复杂度 示例
HINCRBY HINCRBY key field increment 整数递增 O(1) HINCRBY user:1 age 1
HINCRBYFLOAT HINCRBYFLOAT key field increment 浮点数递增 O(1) HINCRBYFLOAT account:1 balance 100.5
4. 遍历操作
命令 语法 说明 时间复杂度 示例
HSCAN HSCAN key cursor [MATCH pattern] 游标遍历字段 O(1)每次迭代 HSCAN user:1 0 MATCH name*
HSTRLEN HSTRLEN key field 字段值长度 O(1) HSTRLEN user:1 name

List(列表)类型命令

1. 插入操作
命令 语法 说明 时间复杂度 示例
LPUSH LPUSH key value1 value2 左侧插入 O(1)每个元素 LPUSH queue task1 task2
RPUSH RPUSH key value1 value2 右侧插入 O(1)每个元素 RPUSH logs "error1" "error2"
LPUSHX LPUSHX key value 列表存在才左侧插入 O(1) LPUSHX active_queue task
RPUSHX RPUSHX key value 列表存在才右侧插入 O(1) RPUSHX active_logs "info"
LINSERT LINSERT key BEFORE|AFTER pivot value 指定位置插入 O(N) LINSERT list BEFORE "b" "a"
2. 弹出操作
命令 语法 说明 时间复杂度 示例
LPOP LPOP key [count] 左侧弹出 O(N) count个 LPOP queue
RPOP RPOP key [count] 右侧弹出 O(N) count个 RPOP logs
BLPOP BLPOP key1 key2 timeout 阻塞式左侧弹出 O(1) BLPOP queue 10
BRPOP BRPOP key1 key2 timeout 阻塞式右侧弹出 O(1) BRPOP task_queue 5
RPOPLPUSH RPOPLPUSH source dest 弹出并推入 O(1) RPOPLPUSH queue backup
BRPOPLPUSH BRPOPLPUSH source dest timeout 阻塞版RPOPLPUSH O(1) BRPOPLPUSH queue backup 10
3. 查看操作
命令 语法 说明 时间复杂度 示例
LRANGE LRANGE key start stop 范围获取 O(S+N) LRANGE list 0 -1
LINDEX LINDEX key index 获取指定位置 O(N) LINDEX list 0
LLEN LLEN key 获取长度 O(1) LLEN queue
LPOS LPOS key value [RANK rank] 查找元素位置 O(N) LPOS list "apple"
4. 修改操作
命令 语法 说明 时间复杂度 示例
LSET LSET key index value 设置指定位置 O(N) LSET list 0 "new"
LREM LREM key count value 删除元素 O(N) LREM list 2 "apple"
LTRIM LTRIM key start stop 截取列表 O(N) LTRIM queue 0 99
LMOVE LMOVE source dest LEFT|RIGHT LEFT|RIGHT 元素移动 O(1) LMOVE queue backup LEFT LEFT
BLMOVE BLMOVE source dest timeout 阻塞版LMOVE O(1) BLMOVE queue backup LEFT LEFT 10

Set(集合)类型命令

1. 基本操作
命令 语法 说明 时间复杂度 示例
SADD SADD key member1 member2 添加元素 O(N) SADD tags "redis" "database"
SREM SREM key member1 member2 删除元素 O(N) SREM tags "redis"
SMOVE SMOVE source dest member 移动元素 O(1) SMOVE set1 set2 "apple"
SPOP SPOP key [count] 随机弹出 O(N) SPOP lottery 3
SISMEMBER SISMEMBER key member 判断是否存在 O(1) SISMEMBER admins "user1"
2. 查看操作
命令 语法 说明 时间复杂度 示例
SMEMBERS SMEMBERS key 获取所有元素 O(N) SMEMBERS online_users
SCARD SCARD key 获取元素数量 O(1) SCARD followers:1001
SRANDMEMBER SRANDMEMBER key [count] 随机获取元素 O(N) SRANDMEMBER lottery 2
3. 集合运算
命令 语法 说明 时间复杂度 示例
SINTER SINTER key1 key2 交集 O(N*M) SINTER set1 set2
SINTERSTORE SINTERSTORE dest key1 key2 交集存储 O(N*M) SINTERSTORE result set1 set2
SUNION SUNION key1 key2 并集 O(N) SUNION set1 set2
SUNIONSTORE SUNIONSTORE dest key1 key2 并集存储 O(N) SUNIONSTORE all set1 set2
SDIFF SDIFF key1 key2 差集 O(N) SDIFF set1 set2
SDIFFSTORE SDIFFSTORE dest key1 key2 差集存储 O(N) SDIFFSTORE result set1 set2
4. 遍历操作
命令 语法 说明 时间复杂度 示例
SSCAN SSCAN key cursor [MATCH pattern] 游标遍历 O(1)每次迭代 SSCAN users 0 MATCH user:*

Sorted Set(有序集合)类型命令

1. 基本操作
命令 语法 说明 时间复杂度 示例
ZADD ZADD key [NX|XX] score member 添加元素 O(log N) ZADD leaderboard 100 "player1"
ZREM ZREM key member1 member2 删除元素 O(M log N) ZREM leaderboard "player1"
ZINCRBY ZINCRBY key increment member 增加分数 O(log N) ZINCRBY leaderboard 10 "player1"
ZSCORE ZSCORE key member 获取分数 O(1) ZSCORE leaderboard "player1"
ZCARD ZCARD key 获取元素数量 O(1) ZCARD leaderboard
2. 排名操作
命令 语法 说明 时间复杂度 示例
ZRANK ZRANK key member 正序排名 O(log N) ZRANK leaderboard "player1"
ZREVRANK ZREVRANK key member 倒序排名 O(log N) ZREVRANK leaderboard "player1"
ZRANGE ZRANGE key start stop [WITHSCORES] 正序范围 O(log N+M) ZRANGE leaderboard 0 9 WITHSCORES
ZREVRANGE ZREVRANGE key start stop [WITHSCORES] 倒序范围 O(log N+M) ZREVRANGE leaderboard 0 9
ZRANGEBYSCORE ZRANGEBYSCORE key min max 按分数范围 O(log N+M) ZRANGEBYSCORE scores 80 100
ZREVRANGEBYSCORE ZREVRANGEBYSCORE key max min 倒序按分数 O(log N+M) ZREVRANGEBYSCORE scores 100 80
3. 计数和删除
命令 语法 说明 时间复杂度 示例
ZCOUNT ZCOUNT key min max 统计分数范围内数量 O(log N) ZCOUNT scores 60 100
ZREMRANGEBYRANK ZREMRANGEBYRANK key start stop 按排名删除 O(log N+M) ZREMRANGEBYRANK leaderboard 0 99
ZREMRANGEBYSCORE ZREMRANGEBYSCORE key min max 按分数删除 O(log N+M) ZREMRANGEBYSCORE scores 0 59
ZREMRANGEBYLEX ZREMRANGEBYLEX key min max 按字典序删除 O(log N+M) ZREMRANGEBYLEX words [a [z
4. 集合运算
命令 语法 说明 时间复杂度 示例
ZUNIONSTORE ZUNIONSTORE dest numkeys key1 key2 并集 O(N)+O(M log M) ZUNIONSTORE total 2 set1 set2
ZINTERSTORE ZINTERSTORE dest numkeys key1 key2 交集 O(N*K)+O(M log M) ZINTERSTORE common 2 set1 set2
ZDIFFSTORE ZDIFFSTORE dest numkeys key1 key2 差集 O(N)+O(M log M) ZDIFFSTORE diff 2 set1 set2
ZUNION ZUNION numkeys key1 key2 并集不存储 O(N)+O(M log M) ZUNION 2 set1 set2
ZINTER ZINTER numkeys key1 key2 交集不存储 O(N*K)+O(M log M) ZINTER 2 set1 set2
ZDIFF ZDIFF numkeys key1 key2 差集不存储 O(N)+O(M log M) ZDIFF 2 set1 set2
5. 字典序操作(分数相同时)
命令 语法 说明 时间复杂度 示例
ZRANGEBYLEX ZRANGEBYLEX key min max 按字典序范围 O(log N+M) ZRANGEBYLEX words [a [z
ZREVRANGEBYLEX ZREVRANGEBYLEX key max min 倒序字典序 O(log N+M) ZREVRANGEBYLEX words [z [a
ZLEXCOUNT ZLEXCOUNT key min max 字典序范围计数 O(log N) ZLEXCOUNT words [a [z
6. 遍历操作
命令 语法 说明 时间复杂度 示例
ZSCAN ZSCAN key cursor [MATCH pattern] 游标遍历 O(1)每次迭代 ZSCAN leaderboard 0 MATCH player*

通用命令(适用于所有数据类型)

命令 语法 说明 示例
KEYS KEYS pattern 查找所有匹配的key KEYS user:*
EXISTS EXISTS key 判断key是否存在 EXISTS username
TYPE TYPE key 查看key的类型 TYPE user:1
DEL DEL key1 key2... 删除key DEL user:1 cache:2
EXPIRE EXPIRE key seconds 设置过期时间 EXPIRE code 60
TTL TTL key 查看剩余时间 TTL session:123
PERSIST PERSIST key 移除过期时间 PERSIST token:456
RENAME RENAME old new 重命名key RENAME user user:1
RANDOMKEY RANDOMKEY 随机返回一个key RANDOMKEY
DUMP DUMP key 序列化key DUMP user:1
RESTORE RESTORE key ttl value 反序列化 RESTORE user:1 0 "\x00..."
SCAN SCAN cursor [MATCH pattern] 游标迭代key SCAN 0 MATCH user:*

HyperLogLog 类型命令

命令 语法 说明 时间复杂度 示例
PFADD PFADD key element1 element2 添加元素 O(1) PFADD unique_visits ip1 ip2
PFCOUNT PFCOUNT key1 key2 统计基数 O(1) PFCOUNT unique_visits
PFMERGE PFMERGE dest key1 key2 合并 O(N) PFMERGE total_visits visit1 visit2

Bitmap 相关命令

命令 语法 说明 时间复杂度 示例
SETBIT SETBIT key offset value 设置位 O(1) SETBIT sign:20240101 1001 1
GETBIT GETBIT key offset 获取位 O(1) GETBIT sign:20240101 1001
BITCOUNT BITCOUNT key [start end] 统计1的个数 O(N) BITCOUNT sign:20240101
BITPOS BITPOS key bit [start end] 查找位位置 O(N) BITPOS sign:20240101 1
BITOP BITOP op dest key1 key2 位运算 O(N) BITOP AND result bits1 bits2
BITFIELD BITFIELD key [GET type offset] 多位操作 O(1) BITFIELD mykey INCRBY i5 100 1 GET u4 0

Geo 地理空间命令

命令 语法 说明 时间复杂度 示例
GEOADD GEOADD key longitude latitude member 添加地理位置 O(log N) GEOADD cities 116.40 39.90 "北京"
GEOPOS GEOPOS key member1 member2 获取位置 O(log N) GEOPOS cities "北京"
GEODIST GEODIST key member1 member2 [unit] 计算距离 O(log N) GEODIST cities "北京" "上海" km
GEORADIUS GEORADIUS key lng lat radius unit 半径查询 O(N+log N) GEORADIUS cities 116.40 39.90 100 km
GEORADIUSBYMEMBER GEORADIUSBYMEMBER key member radius unit 以成员为中心 O(log N) GEORADIUSBYMEMBER cities "北京" 100 km
GEOHASH GEOHASH key member1 member2 获取GeoHash O(log N) GEOHASH cities "北京"
GEOSEARCH GEOSEARCH key [FROMMEMBER member] 高级搜索 O(N+log N) GEOSEARCH cities FROMLONLAT 116 39 BYRADIUS 100 km

Stream 流类型命令

1. 生产和消费
命令 语法 说明 时间复杂度 示例
XADD XADD key * field value 添加消息 O(log N) XADD mystream * name "张三" age 25
XREAD XREAD COUNT count STREAMS key id 读取消息 O(N) XREAD COUNT 10 STREAMS mystream 0
XRANGE XRANGE key start end [COUNT count] 范围查询 O(log N+M) XRANGE mystream - + COUNT 10
XREVRANGE XREVRANGE key end start [COUNT count] 反向范围 O(log N+M) XREVRANGE mystream + - COUNT 10
2. 消费者组
命令 语法 说明 时间复杂度 示例
XGROUP XGROUP CREATE key group id 创建消费组 O(1) XGROUP CREATE mystream mygroup $
XREADGROUP XREADGROUP GROUP group consumer 组消费 O(N) XREADGROUP GROUP mygroup c1 COUNT 10 STREAMS mystream >
XACK XACK key group id1 id2 确认消息 O(1) XACK mystream mygroup 123-0
XPENDING XPENDING key group 查看待确认 O(1) XPENDING mystream mygroup
XCLAIM XCLAIM key group consumer min-idle-time id 转移消息 O(log N) XCLAIM mystream mygroup c2 3600000 123-0
3. 管理和删除
命令 语法 说明 时间复杂度 示例
XDEL XDEL key id 删除消息 O(1) XDEL mystream 123-0
XLEN XLEN key 获取长度 O(1) XLEN mystream
XTRIM XTRIM key MAXLEN count 裁剪流 O(N) XTRIM mystream MAXLEN 1000
XINFO XINFO STREAM key 查看流信息 O(1) XINFO STREAM mystream

事务相关命令

命令 语法 说明 时间复杂度 示例
MULTI MULTI 开启事务 O(1) MULTI
EXEC EXEC 执行事务 取决于命令 EXEC
DISCARD DISCARD 取消事务 O(1) DISCARD
WATCH WATCH key1 key2 监视key O(1) WATCH balance
UNWATCH UNWATCH 取消监视 O(1) UNWATCH

发布订阅命令

命令 语法 说明 时间复杂度 示例
PUBLISH PUBLISH channel message 发布消息 O(N+M) PUBLISH news "Hello"
SUBSCRIBE SUBSCRIBE channel1 channel2 订阅频道 O(N) SUBSCRIBE news sports
UNSUBSCRIBE UNSUBSCRIBE [channel] 取消订阅 O(N) UNSUBSCRIBE news
PSUBSCRIBE PSUBSCRIBE pattern1 pattern2 模式订阅 O(N) PSUBSCRIBE news.*
PUNSUBSCRIBE PUNSUBSCRIBE [pattern] 取消模式订阅 O(N) PUNSUBSCRIBE news.*
PUBSUB PUBSUB subcommand [arg] 查看订阅信息 O(N) PUBSUB CHANNELS

Lua脚本命令

命令 语法 说明 时间复杂度 示例
EVAL EVAL script numkeys key1 arg1 执行脚本 取决于脚本 EVAL "return redis.call('set',KEYS[1],ARGV[1])" 1 name "张三"
EVALSHA EVALSHA sha1 numkeys key1 arg1 执行缓存脚本 取决于脚本 EVALSHA "6b1bf0c3" 1 name "张三"
SCRIPT LOAD SCRIPT LOAD script 加载脚本 O(N) SCRIPT LOAD "return redis.call('get',KEYS[1])"
SCRIPT EXISTS SCRIPT EXISTS sha1... 检查脚本 O(N) SCRIPT EXISTS "6b1bf0c3"
SCRIPT FLUSH SCRIPT FLUSH 清除所有脚本 O(N) SCRIPT FLUSH
SCRIPT KILL SCRIPT KILL 终止脚本 O(1) SCRIPT KILL

连接管理命令

命令 语法 说明 时间复杂度 示例
AUTH AUTH password 密码认证 O(1) AUTH mypassword
PING PING 测试连接 O(1) PING
ECHO ECHO message 返回消息 O(1) ECHO "Hello"
SELECT SELECT index 切换数据库 O(1) SELECT 1
QUIT QUIT 关闭连接 O(1) QUIT
CLIENT CLIENT LIST 客户端管理 O(N) CLIENT LIST

服务器管理命令

命令 语法 说明 时间复杂度 示例
INFO INFO [section] 服务器信息 O(1) INFO server
CONFIG GET CONFIG GET pattern 获取配置 O(N) CONFIG GET *max*
CONFIG SET CONFIG SET parameter value 设置配置 O(1) CONFIG SET maxmemory 1gb
DBSIZE DBSIZE 当前数据库key数量 O(1) DBSIZE
FLUSHDB FLUSHDB [ASYNC] 清空当前数据库 O(N) FLUSHDB ASYNC
FLUSHALL FLUSHALL [ASYNC] 清空所有数据库 O(N) FLUSHALL ASYNC
SAVE SAVE 同步保存 O(N) SAVE
BGSAVE BGSAVE 后台保存 O(1) BGSAVE
LASTSAVE LASTSAVE 最后保存时间 O(1) LASTSAVE
SHUTDOWN SHUTDOWN [SAVE|NOSAVE] 关闭服务器 O(N) SHUTDOWN SAVE
TIME TIME 服务器时间 O(1) TIME

常用命令速查表

操作类型 String Hash List Set Sorted Set
添加 SET HSET LPUSH/RPUSH SADD ZADD
获取 GET HGET LINDEX SMEMBERS ZRANGE
删除 DEL HDEL LREM SREM ZREM
存在 EXISTS HEXISTS - SISMEMBER -
长度 STRLEN HLEN LLEN SCARD ZCARD
批量 MGET/MSET HMGET/HMSET LPUSH/RPUSH SADD ZADD
递增 INCR HINCRBY - - ZINCRBY

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐