Redis 核心知识点汇总:安装配置 + 9 大数据结构命令与场景
目录
一、Redis简介
属于NoSQL数据库的范畴
NoSQL(Not Only SQL),非关系型数据库
K-V:Redis
列族:HBase
图形:Neo4J
文档:MongoDB,Elasticsearch(倒排索引)
特点
性能好
单线程
多路复用
丰富的数据类型(5种主要数据类型 + bitmap hpyerloglog 地理....)
模拟消息中间件(消息队列 MQ Message Queue)
分布式锁机制
持久化
主从复制
集群架构
二、Redis安装(linux环境)
首先进入之前学习的centos连接到MobaXterm客户端
前期安装注意事项
因为redis是c语言编写,所以在客户端先安装gcc
# 关闭防⽕墙 systemctl stop firewalld.service # 永久关闭防火墙 systemctl disable firewalld # 查看状态 firewall-cmd --state# 检查版本 gcc --version # 安装 gcc yum install gcc因为我已经提前下好了所以这里不给实际情况图了
下载好gcc后,养成好习惯,将redis单独创建一个文件夹;
我放在了usr/local/redis下,进入该文件夹下,
输入安装命令:
wget https://download.redis.io/releases/redis-7.4.1.tar.gz下载redis的linux压缩包,这里使用的是7版本用于学习
解压redis包:
tar -zxvf redis-7.4.1.tar.gz进入7版本目录,进行编译安装(做完这一步才是真正安装成功)
# 进入目录 cd redis-7.4.1 # 编译安装 make && make install安装完成后在local下的bin文件中会生成相应的服务
出现箭头所指的两个服务就表示安装成功了
文件介绍:
- redis-benchmark:性能测试工具
- redis-check-aof:修复有问题的 aof 文件
- redis-check-rdb:修复有问题的rdb文件
- redis-sentinel:Redis集群使用
- redis-server:Redis服务器启动命令
- redis-cli:客户端,操作入口
在bin目录下或者redis本身包下启动:redis-server
配置redis
这个启动方式无法在后台进行运行,退出后会直接关闭redis服务,
所以我们进配置文件中对redis做些设置
注意这里要先进reids文件目录:vim redis.conf
进到一个类似这样的文件,然后去寻找以下配置进行修改
注释掉这个内容,就可以支持远程连接了
bind * -::*关闭安全保护机制,就可以进行远程连接了
protected-mode no开启守护进程,就可以后台运行了
daemonize yes可以给默认用户设置密码(可以不做,如果设置了记得登录时需要验证一遍密码)
requirepass 1qaz@WSX
保存退出后,之后就要使用配置文件进行启动redis(可后台):redis-server redis.conf
使用redis-cli连接测试
出现最下面那个提示框就是登录成功了
退出 和 关闭 redis
# 退出redis quit # 关闭redis redis-cli shutdown这里推荐一款软件作为redis的客户端:Another Redis Desktop Manager
可以自行去gitee下载,下载好后点击new connection
host栏输入你的虚拟机的ip地址,post输入默认的本地端口号6379,如果前面有设置密码的记得加上密码
三、Redis数据结构
常用类型
(1)String 字符串
用途:最简单的 key-value,存单个值、数字、JSON 都行,支持原子加减。
结构图
key → "value" user:1 → '{"name":"roy","age":20}'常用命令
SET key value # 存 GET key # 取 MSET k1 v1 k2 v2 # 批量存 MGET k1 k2 # 批量取 INCR key # 数字+1 DECR key # 数字-1 EXPIRE key 10 # 10秒过期 SETNX key value # 不存在才存(分布式锁)场景
- 单值缓存:配置、计数器、限流计数
- 对象缓存:直接存 JSON
- 分布式锁:
SET lock true EX 10 NX
(2)Hash 哈希
用途:一个 key 里存多个字段,适合对象、购物车,比 String 省内存、改字段方便。
结构图
key ├─ field1 → value1 ├─ field2 → value2 └─ field3 → value3 user:1 ├─ name → roy └─ age → 20常用命令
HSET k f v # 设字段 HGET k f # 取字段 HMSET k f1 v1 f2 v2 # 批量设 HMGET k f1 f2 # 批量取 HDEL k f # 删字段 HGETALL k # 查所有 HINCRBY k f 1 # 字段数字+1场景
- 用户信息:
user:1 {name,age,balance}- 购物车:
cart:uid {goodsId → count}
(3)List 列表
用途:有序、可重复、两头进出,做队列、栈、消息流。
结构图
key → [a][b][c][d] 索引: 0 1 2 3 负数: -4 -3 -2 -1常用命令
LPUSH k v # 左边头插 RPUSH k v # 右边尾插 LPOP k # 左出头 RPOP k # 右出尾 LRANGE k 0 -1 # 查全部 BLPOP k 0 # 阻塞左出(0=一直等)场景
- 栈:
LPUSH + LPOP- 队列:
LPUSH + RPOP- 消息队列:
LPUSH + BRPOP- 时间线 /feed 流:文章列表、动态列表
(4)Set 集合
用途:无序、元素不重复,做点赞、关注、共同好友、去重。
结构图
key → {a, b, c, d} (无序,无重复)常用命令
SADD k v # 加元素 SREM k v # 删元素 SMEMBERS k # 查所有 SCARD k # 数量 SISMEMBER k v # 是否存在 SRANDMEMBER k 2 # 随机取2个(不删) SPOP k 1 # 随机弹出1个(删除) # 集合运算 SINTER s1 s2 # 交集(共同好友) SUNION s1 s2 # 并集 SDIFF s1 s2 # 差集场景
- 点赞:
like:post1 {uid1,uid2}- 抽奖:参与用户放 set,随机 pop
- 共同关注、好友推荐
(5)ZSet 有序集合
用途:唯一 + 按分数排序,做排行榜、延时队列、带权重排序。
结构图
key → (score1:memberA), (score2:memberB), (score3:memberC) 按 score 从小到大排序常用命令
ZADD k 100 a # 加分值元素 ZREM k a # 删元素 ZSCORE k a # 查分数 ZINCRBY k 5 a # 分数+5 ZCARD k # 元素数 ZRANGE k 0 9 # 正序前10 ZREVRANGE k 0 9 WITHSCORES # 倒序前10+分数 ZUNIONSTORE dest 2 s1 s2 # 合并榜单场景
- 热搜 / 排行榜:文章阅读量、积分排名
- 延时任务:score = 时间戳,轮询取到期任务
特殊类型
(6)Bitmap 位图
用途:用 0/1 记录状态,极省空间:1 个 bit 记一件事。
结构图
key → 0 1 0 1 1 0 1 ...(每一位是 0/1) 偏移:0 1 2 3 4 5 6 ...常用命令
SETBIT k 10 1 # 第10位设为1 GETBIT k 10 # 查第10位 BITCOUNT k # 统计有多少个1(签到次数) BITPOS k 1 # 第一个1的位置场景
- 签到:
sign:uid每天一位,1 = 签到- 活跃状态、在线状态、权限开关
(7)HyperLogLog
用途:用极小内存统计 “不重复元素个数”(UV、去重计数),不存明细,只算数量。
结构图
key → 内部概率结构(不存原始数据) 输入:1.1.1.1、1.1.1.2、1.1.1.1 输出:去重后数量=2常用命令
PFADD k 1.1.1.1 # 加入元素 PFCOUNT k # 统计去重总数(UV) PFMERGE dest k1 k2 # 合并多个统计场景
- 页面 UV、日活统计(亿级数据只需 12KB)
(8)Geo 地理位置
用途:存经纬度、算距离、查附近,外卖 / 地图 / LBS。
结构图
key ├─ 北京 → (lon, lat) └─ 上海 → (lon, lat)常用命令
GEOADD k 116.4 39.9 北京 # 加地点经纬度 GEOPOS k 北京 # 查经纬度 GEODIST k 北京 上海 km # 算距离(km/m) GEORADIUS k 116.4 39.9 5 km # 附近5km场景
- 附近门店、外卖骑手、距离排序
(9)Stream
用途:Redis 消息队列,支持持久、消费组、确认机制,类似 Kafka 简化版。
结构图
stream:mystream msg1(id1) → {k:v} msg2(id2) → {k:v} msg3(id3) → {k:v} consumer group → 分配给不同消费者,记录消费位点常用命令
XADD k * name roy # 发消息(*自动生成id) XRANGE k - + # 查全部消息 XGROUP CREATE k g1 0 # 创建消费组 XREADGROUP GROUP g1 c1 STREAMS k > # 消费未读消息 XPENDING k g1 # 查看消费进度/待确认场景
- 消息队列、日志流、事件通知、需要 ack 的任务队列
更多推荐








所有评论(0)