Redis 的基础应用场景

  1. 获取中奖用户ID,随机弹出之后集合中就不存在了【set】
  2. 存储活动中中奖的用户ID,保证同一个用户不会中奖两次【set】
  3. 存储粉丝列表,value 为粉丝的用户ID,score 是关注时间【zset】
  4. 存储学生成绩,value 为学生的ID,score 是考试成绩【zset】
  5. 记录帖子的点赞数、评论数、和点击率【hash】
  6. 记录用户的帖子ID列表,便于快速显示用户的帖子列表【zset】
  7. 记录帖子的标题、摘要、作者和封面信息,用于列表展示页【hash】
  8. 记录帖子的点赞ID列表,评论ID列表,用于显示和去重计数【zset】
  9. 缓存近期热帖内容,减少数据库压力【hash】
  10. 记录热榜帖子ID列表,总热榜和分类热榜【zset】
  11. 收藏和贴子之间的关系【zset】
  12. 缓存用户的历史行为,过滤恶意行为【zset,hash】

Redis 的基本数据类型

  1. 建值对:相当于字典的 key 和 value,支持简单的增删改查操作。

    1. set/get/exists/del
    2. mset/mget => 批量键值对
    3. expire => 设置过期时间
    4. setex => 5秒后过期,set + expire
    5. setnx => 如果不存在就创建,如果存在就创建不成功
    6. incr/incrby => value是整数,可以进行自增,自增是有范围的。
    7. 获取所有的key:keys *
    8. 清空所有的数据: flushall
    127.0.0.1:6379> ## 单个键值对
    127.0.0.1:6379> ## 设置 key 为 name,value 为 laowen
    127.0.0.1:6379> set name laowen
    OK
    127.0.0.1:6379> get name ## 获取
    "laowen"
    127.0.0.1:6379> exists name ## 检查是否存在
    (integer) 1
    127.0.0.1:6379> del name ## 删除
    (integer) 1
    127.0.0.1:6379> get name ## 获取
    (nil)
    127.0.0.1:6379> set name1 boy ## 设置
    OK
    127.0.0.1:6379> set name2 girl ## 设置
    OK
    127.0.0.1:6379> mget name1 name2 # 放回一个列表
    1) "boy"
    2) "girl"
    127.0.0.1:6379> ## 批量添加多个
    127.0.0.1:6379> mset name1 boy name2 girl name3 unknow
    OK
    127.0.0.1:6379> mget name1 name2 name3
    1) "boy"
    2) "girl"
    3) "unknow"
    127.0.0.1:6379> ## 设置过期时间
    127.0.0.1:6379> set name a
    OK
    127.0.0.1:6379> get name
    "a"
    127.0.0.1:6379> expire name 5 # 5秒后过期
    (integer) 1
    127.0.0.1:6379> get name # 不到5秒
    "a"
    127.0.0.1:6379> get name # 5秒之后
    (nil)
    127.0.0.1:6379> ## 5秒后过期,set + expire
    127.0.0.1:6379> setex name 5 aa
    OK
    127.0.0.1:6379> get name
    "aa"
    127.0.0.1:6379> get name
    (nil)
    127.0.0.1:6379> ## 如果不存在就创建,如果存在就创建不成功
    127.0.0.1:6379> setnx name a # 如果不存在就创建
    (integer) 1
    127.0.0.1:6379> get names
    "a"
    127.0.0.1:6379> setnx name b # 如果存在就创建不成功
    (integer) 0
    127.0.0.1:6379> get name # 没有改变
    "a"
    127.0.0.1:6379> ## 计数
    127.0.0.1:6379> set age 20
    OK
    127.0.0.1:6379> get age
    "20"
    127.0.0.1:6379> incr age
    (integer) 21
    127.0.0.1:6379> get age
    "21"
    127.0.0.1:6379> incrby age 5
    (integer) 26
    127.0.0.1:6379> get age
    "26"
  2. list 列表,注意它是链表而不是数组。

    ​ Redis的列表结构常用于做异步队列使用。队列是先进先出的数据结构,常用于消息队列和异步逻辑处理,会确保元素的访问顺序性。

    ​ 当列表弹出最后一个元素之后,该数据结构被自动删除,内存被回收。

    1. 【队列:右进左出】

      1. rpush 尾部追加
      2. llen 获取长度
      3. lpop 头部删除
      127.0.0.1:6379> ## 添加一个 books 队列
      127.0.0.1:6379> rpush books php java net golang
      (integer) 4
      127.0.0.1:6379> ## books 队列尾部继续添加内容
      127.0.0.1:6379> rpush books c
      (integer) 5
      127.0.0.1:6379> ## books 队列尾部继续添加内容
      127.0.0.1:6379> rpush books python
      (integer) 6
      127.0.0.1:6379> ## books 队列尾部继续添加内容
      127.0.0.1:6379> rpush books vue
      (integer) 7
      127.0.0.1:6379> ## 获取 books 队列的长度
      127.0.0.1:6379> llen books
      (integer) 7
      127.0.0.1:6379> ## 弹出 books 队列的第一个内容
      127.0.0.1:6379> lpop books
      "php"
      127.0.0.1:6379> ## 弹出 books 队列的第一个内容
      127.0.0.1:6379> lpop books
      "java"
      127.0.0.1:6379> ## 弹出 books 队列的第一个内容
      127.0.0.1:6379> lpop books
      "net"
      127.0.0.1:6379> ## 弹出 books 队列的第一个内容
      127.0.0.1:6379> lpop books
      "golang"
      127.0.0.1:6379> ## 弹出 books 队列的第一个内容
      127.0.0.1:6379> lpop books
      "c"
      127.0.0.1:6379> ## 弹出 books 队列的第一个内容
      127.0.0.1:6379> lpop books
      "python"
      127.0.0.1:6379> ## 弹出 books 队列的第一个内容
      127.0.0.1:6379> lpop books
      "vue"
      127.0.0.1:6379> ## 弹出 books 队列的第一个内容
      127.0.0.1:6379> lpop books
      (nil)
      127.0.0.1:6379>
    2. 【栈:右进右出】

      1. rpush 尾部追加
      2. llen 获取长度
      3. rpop 从尾部删除
      127.0.0.1:6379> ## 添加一个 books 栈
      127.0.0.1:6379> rpush books php java net golang
      (integer) 4
      127.0.0.1:6379> ## 获取 books 栈的长度
      127.0.0.1:6379> llen books
      (integer) 4
      127.0.0.1:6379> ## 弹出栈尾部的内容
      127.0.0.1:6379> rpop books
      "golang"
      127.0.0.1:6379> ## 弹出栈尾部的内容
      127.0.0.1:6379> rpop books
      "net"
      127.0.0.1:6379> ## 弹出栈尾部的内容
      127.0.0.1:6379> rpop books
      "java"
      127.0.0.1:6379> ## 弹出栈尾部的内容
      127.0.0.1:6379> rpop books
      "php"
      127.0.0.1:6379> ## 弹出栈尾部的内容
      127.0.0.1:6379> rpop books
      (nil)
      127.0.0.1:6379>
    3. 【慢操作】

    4. 【快速列表】

  3. hash 哈希字典

    类似与字典,一个key对应一个value。适用于 key为标题,value为内容的存储。当hash移除最后一个元素之后,该数据结构被自动删除,内存被回收。

    1. hset key filed value 设置单个
    2. hget key filed 获取单个
    3. hgetall key 获取所有
    4. hdel key filed 删除单个
    5. hlen key 获取长度
    6. hmset key file value 批量设置
    127.0.0.1:6379> ## 设置 name 的哈希、注意 如果字符串中包含空格、需要使用引号
    127.0.0.1:6379> hset name wang wangzong
    (integer) 1
    127.0.0.1:6379> hset name wen wenzong
    (integer) 1
    127.0.0.1:6379> hset name zhang zhangzong
    (integer) 1
    127.0.0.1:6379> ## 获取所有
    127.0.0.1:6379> hgetall name
    1) "wang"
    2) "wangzong"
    3) "wen"
    4) "wenzong"
    5) "zhang"
    6) "zhangzong"
    127.0.0.1:6379> ## 获取长度
    127.0.0.1:6379> hlen name
    (integer) 3
    127.0.0.1:6379> ## 获取单个
    127.0.0.1:6379> hget name wen
    "wenzong"
    127.0.0.1:6379> ## 更新单个,成功返回0
    127.0.0.1:6379> hset name wen wenzongbin
    (integer) 0
    127.0.0.1:6379> hget name wen
    "wenzongbin"
    127.0.0.1:6379> ## 更新单个,成功返回0
    127.0.0.1:6379> hset name wen xiaowen
    (integer) 0
    127.0.0.1:6379> hgetall name
    1) "wang"
    2) "wangzong"
    3) "wen"
    4) "xiaowen"
    5) "zhang"
    6) "zhangzong"
    127.0.0.1:6379> ## 批量 set
    127.0.0.1:6379> hmset name zhao zhaozong li lizong fei feizong
    OK
    127.0.0.1:6379> hgetall name
    1) "wang"
    2) "wangzong"
    3) "wen"
    4) "xiaowen"
    5) "zhang"
    6) "zhangzong"
    7) "zhao"
    8) "zhaozong"
    9) "li"
    10) "lizong"
    11) "fei"
    12) "feizong"
    127.0.0.1:6379> hget name wen
    "xiaowen"
    127.0.0.1:6379> ## 删除单个
    127.0.0.1:6379> hdel name wen
    (integer) 1
    127.0.0.1:6379> hget name wen
    (nil)
    127.0.0.1:6379>
  4. set 集合

    Redis 的集合内部是键值对,是无序的、唯一的。

    1. sadd key value => 添加
    2. smembers key => 获取所有
    3. smembers key value => 检查某个值是否存在
    4. scard key => 获取长度
    5. spop key => 随机弹出
    127.0.0.1:6379> ## 添加一个,不存在,返回1
    127.0.0.1:6379> sadd num 100
    (integer) 1
    127.0.0.1:6379> ## 添加一个,存在, 返回0
    127.0.0.1:6379> sadd num 100
    (integer) 0
    127.0.0.1:6379> ## 添加多个
    127.0.0.1:6379> sadd num 99 89
    (integer) 2
    127.0.0.1:6379> ## 获取所有
    127.0.0.1:6379> ## 和插入的顺序是不一致的,因为 set 是无序的
    127.0.0.1:6379> smembers num
    1) "89"
    2) "99"
    3) "100"
    127.0.0.1:6379> ## 查询某个值是否存在 存在返回 1
    127.0.0.1:6379> sismember num 100
    (integer) 1
    127.0.0.1:6379> ## 查询某个值是否存在 不存在返回 0
    127.0.0.1:6379> sismember num 90
    (integer) 0
    127.0.0.1:6379> scard num ## 获取长度
    (integer) 3
    127.0.0.1:6379> spop num ## 随机弹出一个
    "100"
    127.0.0.1:6379> spop num ## 随机弹出一个
    "89"
    127.0.0.1:6379> spop num ## 随机弹出一个
    "99"
    127.0.0.1:6379> spop num
    (nil)
  5. zset 有序列表

    1. zadd key score value => 添加
    2. zrange key 范围 => 按 score 正序列出,参数为排名范围
    3. zrevrange key 范围 => 按 score 逆序列出,参数为排名范围
    4. zcard key => 获取长度,相当于 count()
    5. zscore key value => 获取指定 value 的 score
    6. zrank key value => 获取指定 value 的排名
    7. zrangebyscore key 范围 => 根据 score 范围取值
    8. zrem key value => 删除指定 value 的 score
    127.0.0.1:6379> ## 添加有序列表 zadd key score value
    127.0.0.1:6379> ## score:成绩
    127.0.0.1:6379> ## key:fan
    127.0.0.1:6379> ## value:wen
    127.0.0.1:6379> zadd fan 100 wen
    (integer) 1
    127.0.0.1:6379> zadd fan 99 zhang
    (integer) 1
    127.0.0.1:6379> zadd fan 101 li
    (integer) 1
    127.0.0.1:6379> zadd fan 98 zhao
    (integer) 1
    127.0.0.1:6379> zadd fan 97 jin
    (integer) 1
    127.0.0.1:6379> ## zrange key 范围
    127.0.0.1:6379> ## 按 score 正序取出;参数为范围
    127.0.0.1:6379> zrange fan 0 -1
    1) "jin"
    2) "zhao"
    3) "zhang"
    4) "wen"
    5) "li"
    127.0.0.1:6379> ## zrevrange key 范围
    127.0.0.1:6379> ## 按 score 逆序取出;参数为范围
    127.0.0.1:6379> zrevrange fan 0 -1
    1) "li"
    2) "wen"
    3) "zhang"
    4) "zhao"
    5) "jin"
    127.0.0.1:6379> ## zcard key 获取总数。相当于 count()
    127.0.0.1:6379> zcard fan
    (integer) 5
    127.0.0.1:6379> ## 获取指定 value 的 score
    127.0.0.1:6379> ## zscore key value
    127.0.0.1:6379> zscore fan wen
    "100"
    127.0.0.1:6379> ## 获取指定 value 的 排名
    127.0.0.1:6379> ## zrank key value
    127.0.0.1:6379> zrank fan wen
    (integer) 3
    127.0.0.1:6379> ## 获取指定范围的数据
    127.0.0.1:6379> ## zrangebyscore key 范围
    127.0.0.1:6379> zrangebyscore fan 99 100
    1) "zhang"
    2) "wen"
    127.0.0.1:6379> ## 获取指定范围的数据
    127.0.0.1:6379> ## zrangebyscore key -inf inf 【只有value】
    127.0.0.1:6379> ## zrangebyscore key -inf inf withscores 【value 和 score 同时返回】
    127.0.0.1:6379> ## -inf/inf 代表 infinite,无穷大的意思,∞大
    127.0.0.1:6379> zrangebyscore fan -inf inf
    1) "jin"
    2) "zhao"
    3) "zhang"
    4) "wen"
    5) "li"
    127.0.0.1:6379> zrangebyscore fan -inf inf withscores
    1) "jin"
    2) "97"
    3) "zhao"
    4) "98"
    5) "zhang"
    6) "99"
    7) "wen"
    8) "100"
    9) "li"
    10) "101"
    127.0.0.1:6379> zrange fan 0 -1
    1) "jin"
    2) "zhao"
    3) "zhang"
    4) "wen"
    5) "li"
    127.0.0.1:6379> ## 删除 value
    127.0.0.1:6379> ## zrem key value
    127.0.0.1:6379> zrem fan wen
    (integer) 1
    127.0.0.1:6379> zrange fan 0 -1
    1) "jin"
    2) "zhao"
    3) "zhang"
    4) "li"
    127.0.0.1:6379>

Redis 的基本数据类型 和 基础应用场景的更多相关文章

  1. Redis常用数据类型介绍、使用场景及其操作命令

    Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字 ...

  2. redis五种数据类型的使用场景

    string 1.String 常用命令: 除了get.set.incr.decr mget等操作外,Redis还提供了下面一些操作: 获取字符串长度 往字符串append内容 设置和获取字符串的某一 ...

  3. Redis五种数据类型及应用场景

    MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加 ...

  4. 2 万字 + 20张图| 细说 Redis 九种数据类型和应用场景

    作者:小林coding 计算机八股文网(操作系统.计算机网络.计算机组成.MySQL.Redis):https://xiaolincoding.com 大家好,我是小林. 我们都知道 Redis 提供 ...

  5. redis中各种数据类型对应的jedis操作命令

    redis中各种数据类型对应的jedis操作命令 一.常用数据类型简介: redis常用五种数据类型:string,hash,list,set,zset(sorted set). 1.String类型 ...

  6. Redis进阶实践之四Redis的基本数据类型

    一.引言    今天正式开始了Redis的学习,如果要想学好Redis,必须先学好Redis的数据类型.Redis为什么会比以前的Memchaed等内存缓存软件使用的更频繁,适用范围更广呢?就是因为R ...

  7. Redis进阶实践之四Redis的基本数据类型(转载4)

    Redis进阶实践之四Redis的基本数据类型 一.引言 今天正式开始了Redis的学习,如果要想学好Redis,必须先学好Redis的数据类型.Redis为什么会比以前的Memchaed等内存缓存软 ...

  8. Redis,Memcache的区别和具体应用场景

    1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器.其本质上就是一个 ...

  9. 【Redis】基本数据类型及命令操作(超详细)

    一.String 1.1 概述 1.2 相关命令列表 1.3 命令示例 二.List 2.1 概述: 2.2 相关命令列表: 2.3 命令示例: 2.4 链表结构的小技巧: 三.Hashes 3.1 ...

随机推荐

  1. 记录B端和C端产品的理解

    C 为:Consumer.Client,我们每天都在接触C端产品,为消费者.个人用户或终端用户,比如:微信.头条.抖音.美团等等. B 为:Business,作为职场人士也会经常接触B端产品,通常为企 ...

  2. 程序员的脑袋系列---利用ffmpeg命令提取音频

    今日各大播放器的版权控制越来越严格.导致很多歌曲无法听,但是MV却可以听.这样很蛋疼有木有? 然而,我们可以利用ffmpeg工具提取MV的音频,比如做成MP3格式,这样就可以听了.--哈哈(邪恶地笑) ...

  3. Java实现 LeetCode 770 基本计算器 IV(暴力+分析题)

    770. 基本计算器 IV 给定一个表达式 expression 如 expression = "e + 8 - a + 5" 和一个求值映射,如 {"e": ...

  4. Java实现 蓝桥杯 历届试题 小数第n位

    历届试题 小数第n位 时间限制:1.0s 内存限制:256.0MB 问题描述 我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数. 如果我们把有限小数的末尾加上无限多个0,它们就有了统一的 ...

  5. Java实现 LeetCode 230 二叉搜索树中第K小的元素

    230. 二叉搜索树中第K小的元素 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素. 说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数. ...

  6. Java实现 LeetCode 136 只出现一次的数字

    136. 只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现 ...

  7. Java实现 LeetCode 124 二叉树中的最大路径和

    124. 二叉树中的最大路径和 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例 1: 输入: ...

  8. Java中lang包的常用方法介绍

    JAVA API(图片来源:实验楼) 包装类 Integer包装类 方法 返回值 功能描述 byteValue() byte 以 byte 类型返回该 Integer 的值 intValue() in ...

  9. docker-compose mysql和node连接认证mongo问题

    前言 最近,想部署一个自己的项目,鉴于自己的服务器是VPS(虚拟主机),配置也不够,就想到了用 docker 直接部署好了,这样既方便部署也方便不用的时候卸载或更新 然后本地搭建了环境,踩了一些坑,在 ...

  10. 2.3 sqlmap目录及结构

    2.3 sqlmap目录及结构Tips:此篇文章主要参考了<sqlmap从入门到精通>这本书中的相关具体细节,由于这本书作者完成的时间大概在2017年作用,所以我根据书中提到的信息再根据目 ...