目录

一、Redis简介

二、Redis安装(linux环境)

前期安装注意事项

配置redis

退出 和 关闭 redis

三、Redis数据结构

常用类型

(1)String 字符串

结构图

常用命令

场景

(2)Hash 哈希

结构图

常用命令

场景

(3)List 列表

结构图

常用命令

场景

(4)Set 集合

结构图

常用命令

场景

(5)ZSet 有序集合

结构图

常用命令

场景

特殊类型

(6)Bitmap 位图

(7)HyperLogLog

(8)Geo 地理位置

(9)Stream


一、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 的任务队列

更多推荐