redis数据结构介绍

Redis-课堂笔记

一、简介

目标

  • 了解NoSQL的概念
  • 了解Redis是什么样的数据库

讲解

1. NoSQL:Not only SQL
  • 数据库类型:
    • 关系型数据库:以表的形式存储数据,以键和约束的形式维护数据关系,这样的数据库就是关系型数据库
      • MySql,Oracle,SQLServer,DB2,Sybase等等
    • 非关系型数据库(NoSQL):不以表的形式存储数据的数据库
  • 为什么有非关系型数据库?
    • 关系型数据库:随着数据量的增加、用户的增加,出现了一些难以解决的问题:
      • 高并发问题:瞬间有海量的请求同时操作数据库。比如:双11,12306春节抢票
      • 高性能问题:瞬间从海量数据里,找到并操作某一条数据。比如:微博的数据量,亚马逊的数据
      • 高扩展性问题:数据库集群环境里,要增加数据库节点,需要做数据迁移
    • 非关系型数据库NoSQL:
      • 易扩展
      • 高性能
      • 灵活的数据模型:不以表的形式存储
      • 高可用
  • 能否抛弃关系型数据库,全部使用非关系型数据库?不能
    • 业务数据之间是有关系的,就需要维护数据之间的关系。
    • 如果直接使用非关系型数据库,不能维护数据关系,只能自己写代码维护数据关系
    • 如果使用关系型数据库,数据库就可以帮我们维护数据之间的关系。使用非关系型数据库作为补充,提升web应用的性能。Redis就是作为缓存使用的
2. Redis
  • Redis数据库:是一个C语言编写的开源的高性能的数据库,是以key-value键值对的形式存储数据,数据是保存在了内存中,所以有极高的读写性能。官方数据:读110000次/s,写81000次/秒
  • Redis的端口:6379 merz

小结

二、安装Redis

目标

  • 能够操作windows的Redis:启动服务,打开客户端连接服务,关闭服务
  • 安装Linux版的Redis
  • 能够操作Linux版的Redis:启动服务,打开客户端连接服务,关闭服务

讲解

1. Windows版的
  • 启动服务:双击redis-server.exe
  • 启动客户端:双击redis-cli.exe
    • 启动之后,会自动连接上本机的Redis数据库,可以直接通过redis命令操作

拓展:redis-cli如何连接远程的redis服务?

在cmd/powershell里,通过命令:redis-cli.exe -h ip地址 -p 端口

在这里插入图片描述

2. Linux版的
  • 启动服务:./redis-server ./redis.conf
  • 启动客户端:./redis-cli
  • 关闭服务:./redis-cli shutdown

小结

三、数据类型

目标

  • 能说出Redis的5种数据类型【面试题】

讲解

  • Redis以键值对形式存储数据。
  • Redis的key:
    • 不要太长,不要超过1024个字节;否则会消耗内存,影响性能
    • 不要太短;否则会降低可读性
  • Redis的value:常用有5种数据类型(数据结构)
    • string:字符串类型
    • hash:哈希类型
    • list:链表类型
    • set:集合类型,无序不重复的数据集合
    • zset:有序集合类型,有序不重复的数据集合

小结

四、Redis的数据操作【重点】

1. String【重点】

目标
  • 掌握String类型的常用操作
讲解
说明
  • string是redis最基本的类型,用的也是最多的,一个key对应一个value。
  • 一个键最大能存储512MB.
应用场景
  • 作为缓存:字符串最经典的使用场景,redis最为缓存层,Mysql作为储存层,绝大部分请求数据都是在redis中操作,由于redis具有支撑高并发特性,所以缓存通常能起到加速读写和降低 后端压力的作用。
  • 计数器:比如视频播放次数,点赞次数。
常用命令

在这里插入图片描述

  • 设置字符串:set key value
  • 获取字符串:get key
  • 删除字符串:del key
  • 存储字符串,并设置有效期:setex key seconds value

2. hash

目标
  • 掌握hash类型的常用操作
讲解
说明
  • Redis中hash 是一个键值对集合,类似于Java里的HashMap。
  • Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

在这里插入图片描述

应用场景
  • 存储对象的数据
  • 特别适合用于存储订单信息:以订单号为key,field为商品编号,value为商品数量
常用命令

在这里插入图片描述

小结

  • 向hash里设置值:hset key field value
    • 如果要设置多个:hmset key field1 value1 field2 value2 ......
  • 从hash里获取值:hget key field
    • 如果 获取多个:hmget key field1 field2 ......
  • 从hash里删除数据:hdel key field

3. list

目标
  • 掌握list的常用操作
讲解
说明
  • 链表类型(或 列表类型,list)可以存储一个有序的字符串列表(链表),常用的操作是向列表两端添加元素,或者获得列表的某一个片段。
  • 列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。
应用场景
  • 消息队列
  • 排队机制
  • 变更不频繁的排行榜(用list,比zset更节省内存)
常用命令

在这里插入图片描述

  • 向列表里添加数据:
    • 从左边添加:lpush key v1 v2 v3...
    • 从右边添加:rpush key v1 v2 v3...
  • 从列表里弹出数据:(弹出后列表里就没有了)
    • 从左边弹出:lpop key
    • 从右边弹出:rpop key

4. set

目标
  • 掌握set类型的常用操作
讲解
说明
  • Redis的Set是string类型的无序不重复的集合,Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的时间复杂度都是O(1)。集合中最大的成员数为 2的32次方 -1 (4294967295, 每个集合可存储40多亿个成员)。

  • Redis还提供了多个集合之间的交集、并集、差集的运算

应用场景
  • 共同好友
  • 共同兴趣
常用命令

在这里插入图片描述
小结

  • 向集合里添加成员:sadd key member1 member2 member3...
  • 获取所有成员:smembers key
  • 随机取出一个成员:spop key

5. zset

目标
  • 掌握zset的常用操作
讲解
说明
  • Redis 有序集合也是string类型元素的不重复的集合

    • 每个元素都会关联一个double类型的分数。有序集合的成员是唯一的,但分数(score)却可以重复。
    • redis正是通过分数来为集合中的成员进行从小到大的排序。
  • 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

应用场景
  • 排行榜
常用命令

在这里插入图片描述

  • 默认排序是从小到大的升序
  • 如果要从大到小排序,使用命令:zrevrange
小结
  • 添加成员:zadd key score1 member1 score2 member2...
  • 删除成员:zrem key member
  • 按名次范围查询:zrange key start stop withscores

五、Redis的其它操作

Redis的其它命令

目标
  • 掌握redis的一些其它通用命令
分析
  • redis的通用命令
  • redis的多数据库特性
讲解
redis的通用命令
  • keys *:查询所有的key

    • keys myset?:查询所有key为myset + 一个任意字符的
  • exists key:判断是否有指定的key 若有返回1,否则返回0

  • expire key 秒数:设置这个key在redis中的存活时间(setex key seconds value

  • ttl key:展示指定key的剩余时间

    • 如果值为 -1:永不过期
    • 如果值为 -2:已过期或者不存在
  • del key:删除指定key

  • rename key 新key:重命名key

  • type key:判断一个key的类型

  • ping :测试连接是否连接

多数据库特性
  • redis默认是16个数据库, 编号是从0~15. 【默认是0号库】

  • 常用的库操作有:

    • select index:切换库

    • move key index: 把key移动到几号库(index是库的编号)

    • flushdb:清空当前数据库

    • flushall:清空当前实例下所有的数据库

小结
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值