Redis学习笔记(一)–基础命令

Redis 基础

第一节 基本命令

通用命令

  • select

    示例:

    select 0
    # 选择0号数据库
  • keys

    示例:

    keys he*
    keys he[h-l]*
    keys ph?
    # 根据Pattern表达式查询符合条件的Key
    # 注意:不要在生产环境中使用,会阻塞线程
  • dbsize

    示例:

    dbsize
    # 返回key的总数
  • exists

    示例:

    exists a
    # 查询key=a是否存在
  • del

    示例:

    del a
    # 删除key=a的数据
  • expire

    示例:

    expire hello 20
    # 设置key=hello 在20s后过期
  • ttl

    示例:

    ttl hello
    # 查看key=a的过期剩余时间
  • flashdb

    示例:

    flashdb
    # 清空当前数据库中的所有数据
  • flashall

    示例:

    flashall
    # 删除所有数据库中的所有数据

第二节 Redis 常用的五种数据结构

Redis 数据类型 - 字符串

value可以是字符串,可以是数字,可以是位数字

String最大512MB,建议单个KV不超过100KB

字符串结构应用类型

  1. 缓存
  2. 秒杀
  3. 分布式锁
  4. 配置中心
  5. 对象序列化
  6. 计数器

Redis 字符串指令

  • get

    示例:

    get hello
    # 获得key=hello的结果
  • set

    示例:

    set hello world
    # 设置key=hello , value=world
  • mset /  mget

    示例:

    mset hello world java best
    mget hello java
    # 一次性 设置 或者 获取 多个kv
  • getset

    示例:

    setget db mongodb
    # 设置新值返回旧值,若没有旧值则返回null并赋予新值
  • setnx

    setnx job programmer
    setnx job farmer # 执行失败
    # 指定key不存在时设置,若存在则不设置
  • del

    示例:

    del hello
    # 删除key=hello的数据
  • incr / decr

    示例:

    incr count
    decr count
    # key值 自增 / 自减 1
  • incrby / decrby

    示例:

    incrby count 99
    decrby count 99
    # key值 自增 / 自减 指定步长

Redis 数据类型 - hash

Redis hash 是一个 string 类型的 field (字段) 和 value (值) 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 2^32^ -1 个键值对(40多亿)。可以理解为每个key存储了一个HashMap对象,通过一个Key可以保存一个数据结构。

hash应用场景

Hash用于存储结构化数据,比如员工i谢谢你,用户信息等等

Redis Hash 命令

  • hset

    示例:

    hset myhash field "foo"
    # 设置单个hash字值段
  • hmset

    hmset myhash field1 "hello" field2 "world"
    # 设置多个hash字值段
  • hget

    hget myhash field1
    # 提取一个redis的key的某个哈希值
  • hgetall

    hgetall myhash
    # 提取一个redis的key的所有哈希值,以键/n值/n的形式返回
  • hexists

    hexists myhash field
  • hdel

    hdel myhash field1 filed2
    # 删除n条记录
  • hval

    hval myhash
    # 返回hash的value的列表,key不存在返回空表

Redis 数据类型 - List

List列表是简单的字符串列表,按照插入顺序排序。可以添加元素到列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 2^32^-1个元素

List 应用场景

保存有需数据队列,例如:排行榜ID队列 / XX购物车商品ID队列 / XX班级ID队列

获取到ID队列后,再根据每一个ID获取对应的HASH对象

Redis List 命令

  • rpush

    rpush listkey c b a
    # 在队尾插入新数据
  • lpush

    lpush listkey f e d
    # 在队首插入新数据
  • lrange

    lrange listkey 0 -1
    # d e f c b a
    # 获取所有
    lrange listkey 0 2
    # d e f
    # 获取队列数据
  • rpop

    rpop listkey
    # a
    # 从右侧弹出数据
  • lpop

    lpop listkey
    # d
    # 从左侧弹出数据

Redis 数据类型 - Set

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,即不会存在重复的数据

Redis 中 Set 集合是通过 哈希表 实现的,故添加、删除。查找的复杂度都是O(1),对Set操作的执行效率极高

集合中的最大成员数为 2^32^-1 个元素

Redis Set 应用场景

Set数据类型常用于交际 / 并集 / 差集 运算

典型场景为:

  • 我与XX位好友共同关注了XXX
  • 将两个数据源的数据清单进行合并
  • 找出X与Y集合的差异
  • 抽奖活动

Redis Set 命令

  • sadd

    sadd user:1:follow fay
    sadd user:1:follow kirov faye harry
    # 新增set数据
  • smembers

    smembers user:1:follow 
    # fay harry faye kirov (不保证顺序)
    # 查看set数据
  • srandmember

    srandmember user:1:follow 2
    # fay kirov (不保证顺序,不改变原集合中的顺序)
  • spop

    spop user:1:follow
    # fay (随机且改变原集合)
    # 随机弹出一个元素
  • sdiff

    sdiff user:2:follow user:1:follow
    # sports ent news
    # sdiff计算的是以左侧Set为基准,查找在右侧Set不存在的条目
  • sinter

    sinter user:1:follow user:2:follow
    # 计算交集
  • sunion

    sunion user:1:follow user:2:follow
    # 计算并集

Redis 数据类型 - ZSet

Redis 的 ZSet 是 String 类型的有序Set集合。集合成员是唯一的,即不会存在重复的数据

ZSet 和 List 的区别

List 强调数据是按存储顺序有序排列,存储顺序与迭代顺序是一致的

ZSet 则是给出分数进行排序,存储顺序与迭代顺序是不一致的

Redis ZSet 应用场景

各种多维度排行榜

Redis ZSet 命令

  • zadd

    zadd player:ranke 1000 fay 900 kirov 800 pinkman 600 grovy
    # 新增数据
  • zrange

    zrange player:rank 0 -1
    # grovy pinkman kirov fay
    zrange player:rank 0 -1 with scores
    # grovy 600 pinkman 800 kirov 900 fay 1000 (将分值一并写出)
    # 根据分值从小到大进行排列
  • zscore

    zscore play:rank fay
    # 获取分数
  • zrank

    zrank play:rank fay
    # 获取排名
  • zrevrank

    zrank play:rank fay
    # 反向排名
  • zrevrange

    zrevrange player:rank 0 -1
    zrevrange player:rank 0 -1 with scores
    # 反向排序
  • zrem

    zrem play:rank grovy
    # 移除指定元素
  • zcount

    zcount player:rank 700 1000
    # 3
    # 获取符合分数要求数据量
  • zrangebyscore

    zrangebyscore player:rank 700 1000 wiht scores
    # pinkman 800 kirov 900 fay 1000

第三节 Redis 开发规约

Key 的设计

image-20220413002604596

不同类型的应用场景

image-20220413002627850

Redis 的安全建议

  • Redis 不要在外网被访问,禁止:bind 0.0.0.0
    • - bind 192.168.132.128
  • 更改 Redis 端口,不要6379
    • port : 8838
  • Redis 使用非 root 启动
  • Redis 没有设置密码或者弱密码,不要与登陆密码相同
    • requirepass 与 masterauth
  • 定期备份,save 命令
  • 配置号 Linux 防火墙规则
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇