yyz notes yyz notes
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

益章

可乐鸡翅
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL

  • Redis

    • Redis安装
    • redis数据类型
      • 1.1 什么是Redis?
      • 1.2 redis特点
      • 2.1 字符串(string)
        • 2.1.1 value的数据结构(数组)
        • 2.1.2 字符串的使用场景(缓存)
      • 2.2 list(列表)
        • 2.1.1 value的数据结构(双向链表)
        • 2.1.2 列表的使用场景(队列、栈)
      • 2.3 hash(字典)
        • 2.3.1 value的数据结构(HashMap)
        • 2.3.2 hash的使用场景(缓存)
      • 2.4 set(集合)
        • 2.4.1 value的数据结构(字典)
        • 2.4.2 set使用场景
      • 2.5 zset(有序集合)
        • 2.5.1 value的数据结构(跳跃列表+字典)
        • 2.5.2 zset应用场景
    • python操作Redis
    • 五种数据类型基本操作
    • redis其他常用操作
    • redis发布订阅
    • redis数据持久化
    • redis集群
    • 雪崩穿透击穿
    • redis锁代码
    • redis缓存代码
    • 部署redis主从
    • redis的cluster配置
    • redis哨兵模式
  • Elasticsearch

  • MongoDB

  • 消息队列

  • 数据存储
  • Redis
YiZhang-You
2023-05-01
目录

redis数据类型

# 01.redis简介

# 1.1 什么是Redis?

  • Redis本质上是一个Key-Value类型的内存数据库,很像memcached。

  • 整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。

  • 因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。

# 1.2 redis特点

  • redis比memcached优点

    • 数据类型:redis支持五中数据类型, memcached所有的值均是简单的字符串
    • value大小限制:redis单个value的最大限制是512M,memcached只能保存1MB的数据
    • 持久化:redis可以持久化,memcached不支持持久化
  • redis为什么快?

    • 纯内存操作
    • 单线程避免上下文切换
    • 非阻塞IO多路复用机制
  • redis缺点

    • 内存限制,不能用作海量数据存储
    • 注:如果需要存储海量数据,可以使用MongoDB

# 02.redis五种数据类型

操作示例:https://www.cnblogs.com/pyyu/p/9467279.html
1
  • 说明:
    • 1.redis中所有数据结构都以唯一的key字符串作为名称,然后通过这个唯一的key来获取对应的value
    • 2.不同的数据类型数据结构差异就在于value的结构不一样

# 2.1 字符串(string)

# 2.1.1 value的数据结构(数组)

  • 1.字符串value数据结构类似于数组,采用与分配容易空间来减少内存频繁分配

  • 2.当字符串长度小于1M时,扩容就是加倍现有空间

  • 3.如果字符串长度操作1M时,扩容时最多扩容1M空间,字符串最大长度为 512M

# 2.1.2 字符串的使用场景(缓存)

  • 1.字符串一个常见的用途是缓存用户信息,我们将用户信息使用JSON序列化成字符串

  • 2.取用户信息时会经过一次反序列化的过程

set   设置key
get   获取key
append  追加string
mset   设置多个键值对
mget   获取多个键值对
del  删除key
incr  递增+1
decr  递减-1

操作示例:https://www.cnblogs.com/pyyu/p/9467279.html
1
2
3
4
5
6
7
8
9
10

# 2.2 list(列表)

# 2.1.1 value的数据结构(双向链表)

  • 1.列表的数据结构是双向链表,这意味着插入和删除的时间复杂度是0(1),索引的时间复杂度位0(n)

  • 2.当列表弹出最后一个元素后,该数据结构会被自动删除,内存被回手

# 2.1.2 列表的使用场景(队列、栈)

lpush         从列表左边插
rpush         从列表右边插
lrange          获取一定长度的元素  lrange key  start stop
ltrim               截取一定长度列表
lpop                 删除最左边一个元素
rpop                     删除最右边一个元素
lpushx/rpushx                key存在则添加值,不存在不处理
1
2
3
4
5
6
7

# 2.3 hash(字典)

# 2.3.1value的数据结构(HashMap)

  • 1.redis中的字典也是HashMap(数组+列表)的二维结构

  • 2.不同的是redis的字典的值只能是字符串

# 2.3.2 hash的使用场景(缓存)

  • 1.hash结构也可以用来缓存用户信息,与字符串一次性全部序列化整个对象不同,hash可以对每个字段进行单独存储
  • 2.这样可以部分获取用户信息,节约网络流量
  • 3.hash也有缺点,hash结构的存储消耗要高于单个字符串
哈希结构就是  k1   ->  k1 : v1     如同字典 套字典  { k1 : { k2: v2 }  }   ,取出v2 必须  k1,取出k2

hashes即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。

hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。

hset 设置散列值
hget  获取散列值
hmset  设置多对散列值
hmget  获取多对散列值
hsetnx   如果散列已经存在,则不设置(防止覆盖key)
hkeys     返回所有keys
hvals     返回所有values
hlen      返回散列包含域(field)的数量
hdel     删除散列指定的域(field)
hexists    判断是否存在
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 2.4 set(集合)

# 2.4.1 value的数据结构(字典)

  • redis中的集合相当于一个特殊的字典,字典的所有value都位null
  • 当集合中的最后一个元素被移除后,数据结构会被自动删除,内存被回收

# 2.4.2 set使用场景

  • set结构可以用来存储某个活动中中奖的用户ID,因为有去重功能,可以保证同一用户不会中间两次
redis的集合,是一种无序的集合,集合中的元素没有先后顺序。

集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。我们来看例子:

sadd/srem   添加/删除 元素
sismember   判断是否为set的一个元素
smembers    返回集合所有的成员
sdiff             返回一个集合和其他集合的差异
sinter           返回几个集合的交集
sunion          返回几个集合的并集
1
2
3
4
5
6
7
8
9
10

# 2.5 zset(有序集合)

# 2.5.1 value的数据结构(跳跃列表+字典)

  • 1.zset一方面是一个set,保证了内部的唯一性
  • 2.另一方面它可以给每一个value赋予一个score,代表这个value的权重
  • 3.zset内部实现用的是一种叫做“跳跃列表”的数据结构
  • 4.zset最后一个元素被移除后,数据结构就会被自动删除,内存也会被回收

# 2.5.2 zset应用场景

  • 1.粉丝列表:value(粉丝ID),score(关注时间),这样可以轻松按关注事件排序
  • 2.学生成绩:value(学生ID),score(考试成绩),这样可以轻松对成绩排序
  • 排行榜
都是以z开头的命令

zset的每一个成员都有一个分数与之对应,并且分数是可以重复的。有序集合的增删改由于有啦排序,执行效率就是非常快速的,即便是访问集合中间的数据也是非常高效的。
1
2
3

# 03.基本命令

keys *         查看所有key
type key      查看key类型
expire key seconds    过期时间
ttl key     查看key过期剩余时间        -2表示key已经不存在了
persist     取消key的过期时间   -1表示key存在,没有过期时间

exists key     判断key存在    存在返回1    否则0
del keys     删除key    可以删除多个
dbsize         计算key的数量
1
2
3
4
5
6
7
8
9
编辑 (opens new window)
上次更新: 2023/05/17, 23:08:21
Redis安装
python操作Redis

← Redis安装 python操作Redis→

最近更新
01
配置yun源
05-24
02
linux-配置python虚拟环境
05-24
03
linux文件目录管理
05-24
更多文章>
Theme by Vdoing | Copyright © 2023-2023 yizhang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式