

前言:前面我们实现了项目的诸多功能,这里我们将实现项目的另一些功能,不过要学习一些前置知识–Redis
Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value存储系统。
核心特点
|
内存存储与持久化
数据主要存储在内存中,读写速度极快(每秒可处理10万+次读写操作)
支持RDB和AOF两种持久化方式,防止数据丢失
|
|
丰富的数据类型
不仅仅是简单的key-value存储
支持字符串、哈希、列表、集合、有序集合等多种数据结构
|
|
高可用与分布式
支持主从复制、哨兵模式实现高可用
支持Redis Cluster实现分布式集群
|
|
原子性操作:所有Redis操作都是原子性的,支持事务
|
redis的安装非常简单,我们从官网上直接下载对应的压缩包,然后放在自己能找到的目录下解压,这样就算是安装完成了

解压之后的目录如下:

解压完成之后,我们将启动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存储的是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 |
排行榜、延迟队列 |
String(字符串)类型命令
1. 基础操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| SET |
|
设置值 |
O(1) |
|
| GET |
|
获取值 |
O(1) |
|
| MSET |
|
批量设置 |
O(N) |
|
| MGET |
|
批量获取 |
O(N) |
|
| GETSET |
|
设置新值返回旧值 |
O(1) |
|
| SETNX |
|
不存在才设置 |
O(1) |
|
| SETEX |
|
设置并指定过期 |
O(1) |
|
cursor 教程
| PSETEX |
|
毫秒级过期 |
O(1) |
|

2. 数值操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| INCR |
|
递增1 |
O(1) |
|
| INCRBY |
|
增加指定值 |
O(1) |
|
| INCRBYFLOAT |
|
浮点数递增 |
O(1) |
|
| DECR |
|
递减1 |
O(1) |
|
| DECRBY |
|
减少指定值 |
O(1) |
|
3. 字符串操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| APPEND |
|
追加字符串 |
O(1) |
|
| STRLEN |
|
获取长度 |
O(1) |
|
| GETRANGE |
|
截取子串 |
O(N) |
|
| SETRANGE |
|
覆盖指定位置 |
O(1) |
|
| STRALGO |
|
最长公共子串 |
O(N) |
|
4. 位图操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| SETBIT |
|
设置位 |
O(1) |
|
| GETBIT |
|
获取位 |
O(1) |
|
| BITCOUNT |
|
统计1的个数 |
O(N) |
|
| BITOP |
|
位运算 |
O(N) |
|
| BITPOS |
|
查找位位置 |
O(N) |
|
Hash(哈希)类型命令
1. 字段操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| HSET |
|
设置字段 |
O(1) |
|
| HSETNX |
|
字段不存在才设置 |
O(1) |
|
| HGET |
|
获取字段 |
O(1) |
|
| HMSET |
|
批量设置 |
O(N) |
|
| HMGET |
|
批量获取 |
O(N) |
|
| HDEL |
|
删除字段 |
O(N) |
|
2. 批量操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| HGETALL |
|
获取所有字段和值 |
O(N) |
|
| HKEYS |
|
获取所有字段名 |
O(N) |
|
| HVALS |
|
获取所有字段值 |
O(N) |
|
| HLEN |
|
获取字段数量 |
O(1) |
|
| HEXISTS |
|
判断字段是否存在 |
O(1) |
|
3. 数值操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| HINCRBY |
|
整数递增 |
O(1) |
|
| HINCRBYFLOAT |
|
浮点数递增 |
O(1) |
|
4. 遍历操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| HSCAN |
|
游标遍历字段 |
O(1)每次迭代 |
|
| HSTRLEN |
|
字段值长度 |
O(1) |
|
List(列表)类型命令
1. 插入操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| LPUSH |
|
左侧插入 |
O(1)每个元素 |
|
| RPUSH |
|
右侧插入 |
O(1)每个元素 |
|
| LPUSHX |
|
列表存在才左侧插入 |
O(1) |
|
| RPUSHX |
|
列表存在才右侧插入 |
O(1) |
|
| LINSERT |
|
指定位置插入 |
O(N) |
|
2. 弹出操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| LPOP |
|
左侧弹出 |
O(N) count个 |
|
| RPOP |
|
右侧弹出 |
O(N) count个 |
|
| BLPOP |
|
阻塞式左侧弹出 |
O(1) |
|
| BRPOP |
|
阻塞式右侧弹出 |
O(1) |
|
| RPOPLPUSH |
|
弹出并推入 |
O(1) |
|
| BRPOPLPUSH |
|
阻塞版RPOPLPUSH |
O(1) |
|
3. 查看操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| LRANGE |
|
范围获取 |
O(S+N) |
|
| LINDEX |
|
获取指定位置 |
O(N) |
|
| LLEN |
|
获取长度 |
O(1) |
|
| LPOS |
|
查找元素位置 |
O(N) |
|
4. 修改操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| LSET |
|
设置指定位置 |
O(N) |
|
| LREM |
|
删除元素 |
O(N) |
|
| LTRIM |
|
截取列表 |
O(N) |
|
| LMOVE |
|
元素移动 |
O(1) |
|
| BLMOVE |
|
阻塞版LMOVE |
O(1) |
|
Set(集合)类型命令
1. 基本操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| SADD |
|
添加元素 |
O(N) |
|
| SREM |
|
删除元素 |
O(N) |
|
| SMOVE |
|
移动元素 |
O(1) |
|
| SPOP |
|
随机弹出 |
O(N) |
|
| SISMEMBER |
|
判断是否存在 |
O(1) |
|
2. 查看操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| SMEMBERS |
|
获取所有元素 |
O(N) |
|
| SCARD |
|
获取元素数量 |
O(1) |
|
| SRANDMEMBER |
|
随机获取元素 |
O(N) |
|
3. 集合运算
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| SINTER |
|
交集 |
O(N*M) |
|
| SINTERSTORE |
|
交集存储 |
O(N*M) |
|
| SUNION |
|
并集 |
O(N) |
|
| SUNIONSTORE |
|
并集存储 |
O(N) |
|
| SDIFF |
|
差集 |
O(N) |
|
| SDIFFSTORE |
|
差集存储 |
O(N) |
|
4. 遍历操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| SSCAN |
|
游标遍历 |
O(1)每次迭代 |
|
Sorted Set(有序集合)类型命令
1. 基本操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| ZADD |
|
添加元素 |
O(log N) |
|
| ZREM |
|
删除元素 |
O(M log N) |
|
| ZINCRBY |
|
增加分数 |
O(log N) |
|
| ZSCORE |
|
获取分数 |
O(1) |
|
| ZCARD |
|
获取元素数量 |
O(1) |
|
2. 排名操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| ZRANK |
|
正序排名 |
O(log N) |
|
| ZREVRANK |
|
倒序排名 |
O(log N) |
|
| ZRANGE |
|
正序范围 |
O(log N+M) |
|
| ZREVRANGE |
|
倒序范围 |
O(log N+M) |
|
| ZRANGEBYSCORE |
|
按分数范围 |
O(log N+M) |
|
| ZREVRANGEBYSCORE |
|
倒序按分数 |
O(log N+M) |
|
3. 计数和删除
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| ZCOUNT |
|
统计分数范围内数量 |
O(log N) |
|
| ZREMRANGEBYRANK |
|
按排名删除 |
O(log N+M) |
|
| ZREMRANGEBYSCORE |
|
按分数删除 |
O(log N+M) |
|
| ZREMRANGEBYLEX |
|
按字典序删除 |
O(log N+M) |
|
4. 集合运算
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| ZUNIONSTORE |
|
并集 |
O(N)+O(M log M) |
|
| ZINTERSTORE |
|
交集 |
O(N*K)+O(M log M) |
|
| ZDIFFSTORE |
|
差集 |
O(N)+O(M log M) |
|
| ZUNION |
|
并集不存储 |
O(N)+O(M log M) |
|
| ZINTER |
|
交集不存储 |
O(N*K)+O(M log M) |
|
| ZDIFF |
|
差集不存储 |
O(N)+O(M log M) |
|
5. 字典序操作(分数相同时)
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| ZRANGEBYLEX |
|
按字典序范围 |
O(log N+M) |
|
| ZREVRANGEBYLEX |
|
倒序字典序 |
O(log N+M) |
|
| ZLEXCOUNT |
|
字典序范围计数 |
O(log N) |
|
6. 遍历操作
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| ZSCAN |
|
游标遍历 |
O(1)每次迭代 |
|
通用命令(适用于所有数据类型)
| 命令 |
语法 |
说明 |
示例 |
| KEYS |
|
查找所有匹配的key |
|
| EXISTS |
|
判断key是否存在 |
|
| TYPE |
|
查看key的类型 |
|
| DEL |
|
删除key |
|
| EXPIRE |
|
设置过期时间 |
|
| TTL |
|
查看剩余时间 |
|
| PERSIST |
|
移除过期时间 |
|
| RENAME |
|
重命名key |
|
| RANDOMKEY |
|
随机返回一个key |
|
| DUMP |
|
序列化key |
|
| RESTORE |
|
反序列化 |
|
| SCAN |
|
游标迭代key |
|
HyperLogLog 类型命令
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| PFADD |
|
添加元素 |
O(1) |
|
| PFCOUNT |
|
统计基数 |
O(1) |
|
| PFMERGE |
|
合并 |
O(N) |
|
Bitmap 相关命令
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| SETBIT |
|
设置位 |
O(1) |
|
| GETBIT |
|
获取位 |
O(1) |
|
| BITCOUNT |
|
统计1的个数 |
O(N) |
|
| BITPOS |
|
查找位位置 |
O(N) |
|
| BITOP |
|
位运算 |
O(N) |
|
| BITFIELD |
|
多位操作 |
O(1) |
|
Geo 地理空间命令
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| GEOADD |
|
添加地理位置 |
O(log N) |
|
| GEOPOS |
|
获取位置 |
O(log N) |
|
| GEODIST |
|
计算距离 |
O(log N) |
|
| GEORADIUS |
|
半径查询 |
O(N+log N) |
|
| GEORADIUSBYMEMBER |
|
以成员为中心 |
O(log N) |
|
| GEOHASH |
|
获取GeoHash |
O(log N) |
|
| GEOSEARCH |
|
高级搜索 |
O(N+log N) |
|
Stream 流类型命令
1. 生产和消费
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| XADD |
|
添加消息 |
O(log N) |
|
| XREAD |
|
读取消息 |
O(N) |
|
| XRANGE |
|
范围查询 |
O(log N+M) |
|
| XREVRANGE |
|
反向范围 |
O(log N+M) |
|
2. 消费者组
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| XGROUP |
|
创建消费组 |
O(1) |
|
| XREADGROUP |
|
组消费 |
O(N) |
|
| XACK |
|
确认消息 |
O(1) |
|
| XPENDING |
|
查看待确认 |
O(1) |
|
| XCLAIM |
|
转移消息 |
O(log N) |
|
3. 管理和删除
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| XDEL |
|
删除消息 |
O(1) |
|
| XLEN |
|
获取长度 |
O(1) |
|
| XTRIM |
|
裁剪流 |
O(N) |
|
| XINFO |
|
查看流信息 |
O(1) |
|
事务相关命令
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| MULTI |
|
开启事务 |
O(1) |
|
| EXEC |
|
执行事务 |
取决于命令 |
|
| DISCARD |
|
取消事务 |
O(1) |
|
| WATCH |
|
监视key |
O(1) |
|
| UNWATCH |
|
取消监视 |
O(1) |
|
发布订阅命令
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| PUBLISH |
|
发布消息 |
O(N+M) |
|
| SUBSCRIBE |
|
订阅频道 |
O(N) |
|
| UNSUBSCRIBE |
|
取消订阅 |
O(N) |
|
| PSUBSCRIBE |
|
模式订阅 |
O(N) |
|
| PUNSUBSCRIBE |
|
取消模式订阅 |
O(N) |
|
| PUBSUB |
|
查看订阅信息 |
O(N) |
|
Lua脚本命令
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| EVAL |
|
执行脚本 |
取决于脚本 |
|
| EVALSHA |
|
执行缓存脚本 |
取决于脚本 |
|
| SCRIPT LOAD |
|
加载脚本 |
O(N) |
|
| SCRIPT EXISTS |
|
检查脚本 |
O(N) |
|
| SCRIPT FLUSH |
|
清除所有脚本 |
O(N) |
|
| SCRIPT KILL |
|
终止脚本 |
O(1) |
|
连接管理命令
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| AUTH |
|
密码认证 |
O(1) |
|
| PING |
|
测试连接 |
O(1) |
|
| ECHO |
|
返回消息 |
O(1) |
|
| SELECT |
|
切换数据库 |
O(1) |
|
| QUIT |
|
关闭连接 |
O(1) |
|
| CLIENT |
|
客户端管理 |
O(N) |
|
服务器管理命令
| 命令 |
语法 |
说明 |
时间复杂度 |
示例 |
| INFO |
|
服务器信息 |
O(1) |
|
| CONFIG GET |
|
获取配置 |
O(N) |
|
| CONFIG SET |
|
设置配置 |
O(1) |
|
| DBSIZE |
|
当前数据库key数量 |
O(1) |
|
| FLUSHDB |
|
清空当前数据库 |
O(N) |
|
| FLUSHALL |
|
清空所有数据库 |
O(N) |
|
| SAVE |
|
同步保存 |
O(N) |
|
| BGSAVE |
|
后台保存 |
O(1) |
|
| LASTSAVE |
|
最后保存时间 |
O(1) |
|
| SHUTDOWN |
|
关闭服务器 |
O(N) |
|
| TIME |
|
服务器时间 |
O(1) |
|
常用命令速查表
| 操作类型 |
String |
Hash |
List |
Set |
Sorted Set |
| 添加 |
|
|
|
|
|
| 获取 |
|
|
|
|
|
| 删除 |
|
|
|
|
|
| 存在 |
|
|
– |
|
– |
| 长度 |
|
|
|
|
|
| 批量 |
|
|
|
|
|
| 递增 |
|
|
– |
– |
|
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/273153.html原文链接:https://javaforall.net