安装

要学习redis当然要先安装了,在linux系统中

  • https://github.com/redis/redis-hashes/?tab=readme-ov-file ,这里是Redis各个版本的下载地址,我下的是5.0.3的版本
  • 把下载好的安装包放在 /usr/local文件夹下
  • tar -zxvf redis-5.0.3.tar.gz
  • cd redis-5.0.3
  • make (进入到解压好的redis-5.0.0目录下,进行编译与安装)
  • 启动并指定配置文件: src/redis-server redis.conf (使用后台启动,把redis.conf里的daemonize改为yes)
  • 验证:ps -ef | grep redis
  • 进入客户端:src/redis-cli
  • 退出客户端:exit

常用数据结构

建议去看官方文档

String应用场景

单值缓存

set key value

get key

对象缓存

set user:1 value(json格式数据)

mset user:1 name hangker user:1:balance 1888

mget user1:name user:1:balance

分布式锁

setnx product:10001 true //返回1代表获取锁成功0代表失败

del product:10001 //执行完业务释放锁

set product:10001 true ex 10 nx //防止程序意外终止导致死锁

计数器

incr article:readcount:{文章id}

get article:readcount:{文章id}

Web集群session共享

spring session+ redis实现session共享

分布式系统全局序列号

incrby orderid 1000 //redis批量生成序列号提升性能

HASH应用场景

对象缓存

hmset user {userID}:name hangker {userID}:balance 1888

hmset user 1:name hangker 1:balance 1888

hmget user 1:name 1:balance

电商购物车

以用户id为key,商品id为field,商品数量为value

购物车操作

  1. 添加商品->hset cart:101 10088 1
  2. 增加数量->hincrby cart:101 10088 1
  3. 商品总数->hlen cart:101
  4. 删除商品->hdel crt:101 10088
  5. 获取购物车所有商品->hgetall cart:101

Hash结构优缺点

优点:

  • 同类数据归类整合储存,方便数据管理
  • 相比string操作消耗内存与cpu更小
  • 相比string储存更节省空间

缺点:

  • 过期功能不能使用在field上,只能用在key上
  • Redis集群架构下不适合大规模使用

List

常用操作

  • LPUSH KEY VALUE[VALUE…] //将一个或者多个值value插入到key列表的表头(最左边)
  • RPUSH key value[value…] //将一个或者多个值value插入到列表的表尾(最右边)
  • LPOP key //移除并返回key列表的头元素
  • RPOP key //移除并返回key列表的尾元素
  • LRANGE key start stop //返回列表key中指定区间内的元素,区间以偏移量start和stop指定
  • BLPOP key [key…] timeout //从key列表表头弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待
  • BRPOP key [key…] timeout //从key列表表尾弹出一个元素…

常用数据结构

  • Stack(栈)=LPUSH+LPOP=FILO
  • Queue(队列)=LPUSH+RPOP
  • Blocking MQ(阻塞队列)=LPUSH+BRPOP

应用场景

微博消息和微信公众号消息

我关注了虎哥说车、可伶贝尔等大v

  1. 虎哥说车发微博,消息id为10018

LPUSH msg:{hangker-id} 10018

  1. 可怜贝尔发微博,消息id为10086

LPUSH msg:{hangker-id} 10086

  1. 查看最新微博消息

LRANGE msg:{hangker-id} 0 4

Set

常用操作

  1. SADD key member [member …] //往集合key中存入元素,元素存在则忽略,若key不存在则新建
  2. SREM key member [member …] //从集合key中删除元素
  3. SMEMBERS key //获取集合key中所有元素
  4. SCARD key //获取集合key的元素个数
  5. SISMEMBER key member //判断member元素是否存在于集合key中
  6. SRANDMEMBER key [count] //从集合key中选出count个元素,元素不从key中删除
  7. SPOP key [count] //从集合key中选出count个元素,元素从key中删除

运算操作

  1. SINTER key [key…] //交集运算
  2. SINTERSTORE destination key [key…] //将交集结果存入到新集合destination中
  3. SUNION key [key…] //并集运算
  4. SUNIONSTORE destination key [key…] //将并集结果存入到新集合destination中
  5. SDIFF key [key…] //差集运算
  6. SDIFFSTORE destination key [key…] //将差集结果存入到新集合destination中

应用场景

微信抽奖小程序
  1. 点击参与抽奖加入集合 SADD key {userID}
  2. 查看参与抽奖所有用户 SMEMBERS key
  3. 抽取count名中奖者
  • SRANDMEMBER key [count]
  • SPOP key [count]
微信微博点赞,收藏,标签
  1. 点赞
    SADD like:{消息id} {用户id}
  2. 取消点赞
    SREM like:{消息id} {用户id}
  3. 检查用户是否点过赞
    SISMEMBER like:{消息id} {用户id}
  4. 获取点赞的用户列表
    SMEMBERS like:{消息id}
  5. 获取点赞用户数
    SCARD like:{消息id}
集合操作实现微博微信关注模型
  1. hangker关注的人:

hangkerSet –> {guojia,xushu}

  1. 杨过老师关注的人:

yangguoSet–> {hangker,baiqi,guojia,xushu}

  1. 郭嘉老师关注的人:

guojiaSet–>{hangker,yangguo,baiqi,xushu,xunyu}

  1. hangker和杨过老师的共同关注:

SINTER hangkerSet yangguoSet–>{guojia,xushu}

  1. hangker关注的人也关注他(杨过)

SISMEMBER guojiaSet yangguo

SISMEMBER xushuSet yangguo

  1. 我可能认识的人

SDIFF yangguoSet hangkerSet –> {hangker,baiqi}

集合操作实现电商商品筛选
  • SADD brand:huawei P40

  • SADD brand:xiaomi mi-10

  • SADD brand:iPhone iphone12

  • SADD os:android p40 mi-10

  • SADD cpu:brand:intel P40 mi-10

  • SADD ram:8G P40 mi-12 iphone12

  • SINTER os:android cpu:brand:intel ram:8g–>{P40,mi-10}

ZSet

常用操作

  • ZADD key score member [[score member]…] //往有序集和key中加入带分值元素
  • ZREM key member [member …] //从有序集合key中删除元素
  • ZSCORE key member //返回有序集合key中元素member的分值
  • ZINCRBY key increment member //为有序集合key中元素member的分值加上incerment
  • ZCARD key //返回有序集合key中元素个数
  • ZRANGE key start stop [WITHSCORES] //正序获取有序集合key从start下标到stop下标的元素
  • ZREVRANGE key start stop [WITHSCORES] //倒序获取有序集合key从start下标到stop下标的元素

计算操作

  • ZUNIONSTORE destkey numkeys key [key …] //并集计算
  • ZINTERSTORE destkey numkeys key [key …] //交集计算

应用场景

排行榜实现
  1. 点击新闻

ZINCRBY hotNews:20240314 1 武统台湾

  1. 展示当日排行榜前十

ZREVRANGE hotNews:20240314 0 9 WITHSCORES

  1. 七日搜索榜单计算

ZUNIONSTORE hotNews:20240317-20240324 7 hotNews:20240317 hotNews:20240318…hotNews:20240324

  1. 展示七日排行榜前十

ZREVRANGE hotNews:20240317-20240324 0 9 WITHSCORES