INDEX

  • §1 数据类型与常见应用场景
  • §2 命令速查
  • §3 key 相关指令
  • §4 数据库 相关指令
  • §5 string
    • §5.1 string 基本信息
    • §5.2 string 指令
  • §6 hash
    • §6.1 hash 基本信息
    • §6.2 hash 指令
  • §7 list
    • §7.1 list 基本信息
    • §7.2 list 指令
  • §8 set
    • §8.1 set 基本信息
    • §8.2 set 指令
  • §9 zset
    • §9.1 zset 基本信息
    • §9.2 zset 指令
  • §10 bitmap
    • §10.1 bitmap 基本信息
    • §10.2 bitmap 指令
  • §11 HyperLogLog
    • §11.1 HyperLogLog 基本信息
    • §11.2 HyperLogLog 指令
  • §12 GEO
    • §12.1 GEO 基本信息
    • §12.2 GEO 指令
  • §13 其他指令

§1 数据类型与常见应用场景

下面的数据类型是指 value 的类型

  • string
  • list
  • hash
  • set
  • zset
  • bitmap
  • HyperLogLog
  • GEO
  • stream

§2 命令速查

通过官网

通过 redis 自己
help @关键字

§3 key 相关指令

查看所有 key
keys *

查看 key 是否存在
exists key

查看 key 的类型
type key

删除 key
del key

异步删除 key
unlink key
此指令先在 keyspace 中删除 key,随后异步真正删除数据

设置 key 的超时时间
expire key 10

  • 超时单位为秒
  • -1 表示永久有效
  • -2 表示已经过期


§4 数据库 相关指令

切换数据库
select 数据库号
数据库号 0-15,一共 16 个

查看当前库中 key 的数量
dbsize

清空当前库
flushdb

清空所有库
flushall

§5 string

§5.1 string 基本信息

数据结构 & 特性

  • 数据结构是 Simple Dynamic String,相当于 ArrayList<Char>
    动态字符串类似 ArrayList,通过分配冗余空间的方式防止频繁分配内存空间
  • 扩容
    • < 1M 时,* 2
    • > 1M 时,+ 1M
  • 最大存储 512 M
  • string 是二进制安全的,因此可以存储任意数据(比如图片、序列化对象)

适用场景与应用

  • 常用于分布式锁、普通存取、点赞(INCR,只需要数量,不能取消)
  • 或其他 长 key 但值单一 的数据

§5.2 string 指令

单一存取
SET key value
GET key

批量存取
MSET key1 value1 key2 value2
MSET key1 key2

自增自减
INCR key
INCRBY key n
DECR key
DECRBY key n

获取长度
STRLEN key

追加
APPEND KEY value
用于将 value 追加到 KEY 原 value 的后面

value 截取
GETRANGE key start end
获取值的子串,包含 start、end

value 插入
SETRANGE key index value
将 value 插入原值 index 位置

原子存
SETNX key value
SET key value 超时 标记

  • 超时有两种

    • EX 单位是秒
    • PX 单位是毫秒
  • 标记有两种
    • NX key 不存在时存入,等同于 setnx
    • XX key 存在时覆盖
  • SETNX 也只有批量版本 MSETNX
    但只要有一个值设置不成功,则整个操作都失败

超时存
SETEX key expire value
存 key 时同时设置超时时间

复写存
SETGET key value
存 key 时同时用 value 替换原始值

查询超时
TTL key

§6 hash

§6.1 hash 基本信息

数据结构 & 特性

  • 数据结构是 zipList 和 hash 表

    • 数据量较少时,使用压缩列表存储,压缩列表是一块连续的空间
    • 数据量较多时,使用 hash 表
  • Redis 中的 hash 相当于 Map<key,Map<fieldd,value>>
    需要注意,Map<field,value> 的部分才是 hash
  • field 和 value 的类型可以是 String、byte[],相当于是 Object

适用场景与应用
对象存储
可以使用 hash 或 string(存 json str)
但如果需要对对象进行频繁修改并需要被其他调用者知道,应该使用 hash

购物车(小型电商)
下面的 key = prefix:userid,比如 shopcar:u1234
新增商品 hset key prodid count
添加商品数量 hset key prodid 1
商品总数 hlen key
全选 hgetall key

§6.2 hash 指令

单一存取
HSET key field value
HGET key field

批量存取
HMSET key field1 value1 field1 value1
HMGET key field1 field2

较新版本中可以使用 HSET key field1 value1 field1 value1 替代 HMSET key field1 value1 field1 value1

获取所有字段
HGETALL key
获取所有字段和值

获取 key 中全部 field 数量
HLEN key

查看 key 中是否具有 field
HEXISTS key field

获取 key 中全部 field
HKEYS key
只获取所有字段

获取 key 中全部 value
HVALS key

字段自增
HINCRBY key field n
key 的 field 字段增加 n

删除 key
HDEL

原子增加 field
HSETNX key field value

§7 list

§7.1 list 基本信息

数据结构 & 特性

  • 数据结构是 quickList

    • quickList,即压缩列表 zipList 的链表
    • 数据量较少时,使用压缩列表存储,压缩列表是一块连续的空间
    • 数据量较多时,使用 quickList
      将压缩列表 zipList 作为双向链表的 node 用前后指针串起来
      约定list 左为头,右为尾,即 (head…tail)
      因为虽然可以双向操作,但只有 LRANGE 没有 RRANGE
  • 有序
  • 元素可重复

适用场景与应用
简易消息队列(双向列表)
文章推送、关注列表、消息盒子 LPUSH msg:userid messageid

§7.2 list 指令

左右存
LPUSH key value1 value2
RPUSH key value1 value2

左右取(注意不是读,取后元素会移除)
LPOP key
RPOP key

左右取多个
LPOP key count
RPOP key count
相当于循环多次取,因此对 [1,2,3,4,5] 进行 RPOP key 2 得到 5,4

获取指定范围的元素 list
LRANGE key start end
[start,end] 是要获取的范围
索引 -1 表示最后一个元素

获取 key 长度
LLEN key

获取指定位置的元素
LINDEX key index

修改指定位置的元素
LSET key index value

以元素为坐标插入
LINSERT key before/after value new_value

右侧弹出插入左边
RPOPLPUSH key1 key2
从 key1 的右侧弹出元素,并插入 key2 左侧

左删除
LREM key n value
从左侧删除 n 个指定的 value

§8 set

§8.1 set 基本信息

数据结构 & 特性

  • 数据结构是 dist 字典,即 hash 表
  • 增删查的复杂度是 O(1)O(1)O(1)
  • 无序
  • 无重复

适用场景与应用
用于各种社交场景或活动
抽奖、红包
SADD candidates 1
SPOP candidates 1

点赞(需要记录谁点的,可取消)
SADD article:id userid
SREM article:id userid
SMEMBERS article:id
SCARD article:id
SISMEMBER article:id userid

共同关注的项目
SINTER watch:userid1 watch:userid1
watch:userid1 = 用户 1 的关注列表

共同关注项目的人
SINTER watch.friens:userid1 watch:project1
watch:project = 关注项目 1 的人
SISMEMBER watch:userid2 projectid

可能认识的人(推送 A 认识但 B 不认识的)
SDIFF friends.userid1 friends.useri2

§8.2 set 指令

增删元素
SADD key member1 member2
SREM key member1 member2

获取所有元素
SMEMBERS key

是否包含元素
SISMEMBER key member

元素个数
SCARD key

随机查元素(不删)
SRANDMEMBER key conut

随机获取元素(删)
SPOP key count

元素移动至其他集合
SMOVE source_key dest_key value

是否包含元素
SISMEMBER key member

取交集
SINTER set1 set2

取并集(A+B)
SUNION set1 set2

取差集(属于左但不属于右,A-B)
SDIFF set1 set2

§9 zset

§9.1 zset 基本信息

数据结构 & 特性

  • 数据结构是 hash 表和跳跃表 skipList

    • hash 表相当于 Map<key,Map<member,score>>
    • 跳跃表类似 treeMap,用于给 hash 部分排序
      • 相当于是一个多层的链表
      • 第 0 层每个元素指向下一个元素
      • 第 1 层每个元素指向第 0 层的下下个元素
      • 第 2 层每个元素指向第 1 层的下下个元素
      • 随着使用,各级跳表可能不在均匀,如下图
  • 无序
  • 无重复

适用场景与应用
榜单
ZINCRBY hotest:id 1 member(点赞时,有排名)
ZREVRANGE prods max min
按销量、关注度等排序

§9.2 zset 指令

增删元素
ZADD key score1 member1 score2 member2
ZREM key member1 member2

查看分数
ZSCORE key member

元素加分
ZINCRBY key score member

排序并按分数区间返回(分页)
ZRANGEBYSOCRE key min max
ZREVRANGEBYSOCRE key min max

  • REV 表示反向排序,先按分数区间筛选,然后反向排序返回

按排序区间返回
ZRANGE key start end
ZRANGE key start end withsocres
ZREVRANGE key start end withsocres

  • 0 表示最小分
  • -1 表示最大分
  • withsocre 表示连同评分一起返回
  • REV 表示反向排序,先按分数反向排序,然后按排名区间返回

元素排名(正序、倒序)
ZRANK key member
ZREVRANK key member

按排名删
ZREMRANGEBYRANK key start stop

获取所有元素
SMEMBERS key

元素个数
ZCARD key

分数范围内元素个数
ZCOUNT key min max

§10 bitmap

§10.1 bitmap 基本信息

数据结构 & 特性

  • 数据结构就是 字符串,但相当于将其当做 bit[] 使用

    • 存储时实际就是作为 string 存储
    • 使用上单独提供了一套命令,使使用上达到操作 bit[] 的效果

适用场景与应用
标记位、进度标记(多个准备工作同时具备后可以进行下一步)、游戏存档
适用于每个记录单元仅有两个状态的记录、统计工作,相对传统 set 可以节省大量空间
- 但若数据量不大,且有大量 0 则不适用(因为用不用无所谓)
- 同时,极大数据量时,可能位操作的寻址有较大开销,但及其节省空间(可以理解为 64 倍或更多)

§10.2 bitmap 指令

设置位
SETBIT key offset 1/0
把 key 的 offset 位设置为 1/0
注意,当偏移量很大时,可能比较慢

获取位
GETBIT key offset

统计位
COUNTBIT key
COUNTBIT key start end
统计 key 中值为 1 的 bit 位的个数
可以指定开始、结束位
- 左右都包含
- 支持负数
- 按 byte 为单位
COUNTBIT key 0 1 是统计 key 中前两个字节中 bit 位为 1 的个数

位运算操作
BITOP command result_key key1 key2 ...
对后续的位进行位运算
command 包括

  • and 与
  • or 或
  • xor 异或
  • not 非

§11 HyperLogLog

§11.1 HyperLogLog 基本信息

数据结构 & 特性

  • 数据结构分为 密集存储结构 和 稀疏存储结构 两种
  • 默认为稀疏存储结构
  • 常说的占用12K内存的是密集存储结构,连续 16384 个 6bit 桶串成的位图
  • HyperLogLog 是不精确的,但误差在 0.81%

适用场景与应用
适用于基数问题

基数问题
基数问题是指需要在去重的基础上进行统计的问题
比如 独立访客(UV,Unique Visitor)、独立 IP 数、搜索记录数等

原始的基数问题可以通过下面方式解决

  • 数据库的 distinct count
  • redis 中的 hash、set、bitmaps等
    但 HyperLogLog 更适用于高数据量、高复杂度的场景
  • 体积小,每个 HyperLogLog 键只占用 12KB 内存
  • 数据量大,每个 HyperLogLog 键可计算约 2642^{64}264 个元素的基数
  • 但, HyperLogLog 只记录基数,不记录元素本身

§11.2 HyperLogLog 指令

基数增
PFADD key value1 value2 value3...
增加的时候会自动去重

基数统计
PFCOUNT key

基数合并
PFMERGE result_key key1 key2
将 key1 key2 的基数合并到 result_key

§12 GEO

§12.1 GEO 基本信息

数据结构 & 特性

  • 数据结构分为 密集存储结构 和 稀疏存储结构 两种
  • 默认为稀疏存储结构
  • 常说的占用12K内存的是密集存储结构,连续 16384 个 6bit 桶串成的位图

适用场景与应用
关于经纬度二维坐标的场景
GEO 是 Geographic(地理) 的缩写

§12.2 GEO 指令

坐标增
GEOADD key 经度 纬度 name...
经纬度和 name 可以同时添加多个
有效经纬度 [-180,180],两极不能直接添加

取坐标
GEOPOS key name

坐标模
GEODIST key name1 name2 unit
计算 key 中 name1 name2 两个地点的直线距离
可以指定距离的单位 unit

  • m:米,默认单位
  • km:千米
  • mi:英里
  • ft:英尺

坐标半径搜索
GEORADIUS key 经度 纬度 radius unit
以指定的经纬度为中心、radius 为半径,查找范围内的元素
可以指定半径的单位 unit

  • m:米,默认单位
  • km:千米
  • mi:英里
  • ft:英尺

§13 其他指令

查看配置
config get xx

config get dir 查看当前启动目录,一些文件会输出到这些目录上
config get requirepass 查看当前的密码

修改配置
config set config value

手动持久化
rdb
save

中间件 | Redis - [数据类型 指令]相关推荐

  1. Java Web学习day26------Redis基础、Redis数据类型、常用指令、jedis、持久化

    Redis基础.Redis数据类型.常用指令.jedis.持久化 1. Redis 简介 1.1 NoSQL概念 1.2 Redis概念 1.3 Redis 的下载与安装 1.4 Redis服务器启动 ...

  2. 老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化

    引言 今天周末,我在家坐着掐指一算,马上又要到一年一度的金九银十招聘季了,国内今年上半年受到 YQ 冲击,金三银四泡汤了,这就直接导致很多今年毕业的同学会和明年毕业的同学一起参加今年下半年的秋招,这个 ...

  3. Redis 数据类型介绍

    Redis 数据类型介绍 你也许已经知道Redis并不是简单的key-value存储,实际上他是一个数据结构服务器,支持不同类型的值.也就是说,你不必仅仅把字符串当作键所指向的值.下列这些数据类型都可 ...

  4. redis数据库指令

    前端服务启动 启动命令:./redis-server 可以看到Redis的启动端口为6379(默认),进程id是21087,同时,前端启动Redis 后,终端将进入Redis控制台,没办法继续别的Li ...

  5. redis数据类型及常用数据操作

    redis数据类型及操作 1 官方文档(大全) 2 String-字符串 3 Hash-字典 4 List-列表 5 Set-无序集合 6 Sorted Set-有序集合 7 Pub/Sub-订阅/发 ...

  6. redis介绍, redis安装, redis持久化, redis数据类型

    redis介绍 Redis和Memcached类似,也属于k-v数据存储 Redis官网redis.io, 当前最新稳定版4.0.1 支持更多value类型,除了和string外,还支持hash.li ...

  7. Redis 数据类型之(底层解析)

    Redis 数据类型之(底层解析) Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redi ...

  8. redis设置密码和启动 redis数据类型

    Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径.Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象. Redis运行在内存中 ...

  9. 【Redis】2. Redis数据类型 String以及key的设置约定

    学习资料 https://www.bilibili.com/video/BV1CJ411m7Gc?p=6 数据存储类型介绍 业务数据的特殊性 作为缓存使用 原始业务功能设计 秒杀 618活动 双十一活 ...

最新文章

  1. 稳定多维table排序
  2. 液晶电视服务器无响应时间,液晶电视响应速度时间是多少更好啊?
  3. python测试函数怎么写_Python - 函数
  4. struts基本概念(1)
  5. BaseColumns类的作用
  6. hello一直显示与服务器断开,新手问题--服务器环境部署hello world
  7. 基于Bootstrap的后台通用模板
  8. Linux共享文件夹打不开,Linux 共享文件夹失败
  9. 2021年秋招面经:上海禾赛提前批(FPGA设计)
  10. iOS面试攻略,你必须拥有
  11. IFS认证辅导,国际食品企业认证BRC和IFS起源和发展
  12. 一文吃透MySQL面试八股文
  13. You probably need to get an updated matplotlibrc file from解决方法
  14. 监测DNS服务器状态手动修复,电脑管家修复不了DNS配置_修复DNS技巧-高达阁杀毒软件站...
  15. Photozoom图像放大的技术一二事
  16. VoIP(网络电话)
  17. 浅析ORACLE ERP系统维护方法
  18. 保留有色图标(阿里巴巴图标库)
  19. 长沙云栖谷交通事故_潇湘晨报数字报
  20. 为什么河文档是黑人,而小河看起来却是个白人

热门文章

  1. Java爬虫,爬取竞彩网数据并按指定格式输出到excel表格中
  2. 设计原则:单一职责原则
  3. requests爬取去哪儿网站
  4. 不坑盒子:强大的word插件,让工作更高效
  5. 微信小程序破解版环境搭建
  6. ubuntu不能检测到扩展副屏或双屏,不能使用键盘功能键,tweaks扩展动画消失的可能原因与可能的解决办法
  7. MTK5G-MT6853(天玑720)
  8. SPSS如何做离散和连续变量的统计描述
  9. iOS App 上架App Store及提交审核(Appuploader)
  10. 网络运维与管理2013超值精华本