Redis: Redis介绍

本文详细介绍了Redis的基本概念,包括其作为内存型数据库的特点,以及通用命令的使用。重点讲解了字符串、列表、集合、哈希和有序集合五种常用数据类型,包括它们的介绍、常用命令和数据结构。
摘要由CSDN通过智能技术生成

一、redis介绍

redis是一个基于内存的键值型NoSQL数据库,具有如下特征:

  • 键值型,value可以执行多种不同的数据结构string、list、set、hash和zset等功能丰富。
  • 单线程操作,每个命令都具有原子性
    • 所谓的原子操作值的是不会被线程调度机制打断的操作,这种操作会一直运行到结束,中间不会进行线程切换。对于原子操作的理解可以分为如下两种:
      • 在单线程中,能够在单条指令中完成的操作就是原子操作。中断只发生于指令之间。
      • 在多线程中,不会被其他线程打断的操作就是原子操作。
  • 高性能,低延迟、速度快(基于内存、IO多路复用)
  • 高可用,具有主从、集群和哨兵模式
  • 支持java、c和python等多种语言

功能特性
在这里插入图片描述

二、通用的命令

Redis命令官方地址:https://redis.io/commands,有如下通用的命令:

  • help [command]
    查看一个命令的具体用法
    在这里插入图片描述
  • keys *
    查看库中的所有key或符合模板的所有key。
    在这里插入图片描述
  • DEL [command]:
    删除一个指定的key
  • exists key
    判断某个key是否存在。
  • move key db 当前库就没有了,被移除了。
  • expire key 秒钟
    为给定的key设置过期时间。
    在这里插入图片描述
  • ttl key
    看还当前key还有有多少秒过期,-1表示永不过期,-2表示已过期。
    在这里插入图片描述
  • type key 查看你的key是什么类型。
  • select
    切换数据库
  • dbsize
    查看当前数据库key的数量
  • flushdb
    清空当前库
  • flushall
    清空全部库
  • unlink key
    根据key选择非阻塞删除,仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作

三、数据类型

常用的五大数据类型。

1、字符串类型(String)

(1)介绍

该类型是redis中最简单的存储形式,其value是字符串,可分为三种:

  • String:普通的字符串类型
  • int:整型类型,可以进行加减操作
  • float: 浮点型,可以进行加减操作

(2)常用命令

  • set
    添加或者修键值对
    在这里插入图片描述
  • mset key value [key value …]
    批量添加键值对
  • get key
    根据key获取value
  • mget key [key …]
    根据多个key获取多个value
    在这里插入图片描述
  • incr
    让一个整型的key自增1,相当于java中的i++
  • incrby
    让一个整数按照指定的步长增长
  • incrbyfloat
    让一个浮点类型的数字按照指定步长增长
  • setnx
    设置键值对,如果该key存在则不执行。
    在这里插入图片描述
  • msetnx
    当key都不存在时,可以同时设置多个键值对,且该操作具有原子性,如果有一个设置失败,则都失败。
    在这里插入图片描述
  • setex
    添加一个String类型的键值对,并且指定有效期
  • getrange
    字符串截取,类似于java中的subString操作
    在这里插入图片描述
  • setrange
    在这里插入图片描述
  • getset
    在这里插入图片描述

(3)数据结构

String类型的数据结构为动态字符串,内不能的存储结构类型与java中的ArrayList采用预分配的方式来减少内存的频繁扩容。

2、列表(List)

(1)介绍

是一个字符串列表单键多值,它的底层是一个创建链表,对两端的操作性能很高,通过索引操作中间节点性能较差。

(2)常用命令

  • lpush/rpush
    从列表的左边/右边插入一个或多个值
  • rpoplplush key1 key2
    从key1列表右边获取一个值,并将该值从key1列表中移除,插入到key2列表左边。
  • lrange key start stop
    按照索引下标获取元素(从左到右)
  • lindex key index
    按照索引下标获取元素
  • lpop/rpop key
    从左边/右边获取一个值,并在队列中移除该值,没有值则返回nil
  • linsert key before value newvalue
    在value后面插入新值newvalue
  • lrem key n
    从左边删除n个
  • lset key index value
    将列表key下标为index的值替换为value
  • llen key
    获取列表的长度
  • BLPOP和BRPOP
    该命令会按照key的顺序查找list,直到找到第一个非空的list获取并移除该list最左边或最右边的第一个元素。此外还可以在指定的时间内获取列表中的元素,如果在指定的时间内没有元素则阻塞等待。
    在这里插入图片描述
    SpringBoot中代码应用:
 public List<String> pop(List<String> keys, int timeout) {
        return stringRedisTemplate.execute(connection -> {
            Assert.isTrue(connection instanceof DefaultStringRedisConnection, "Connection is not DefaultStringRedisConnection!");
            DefaultStringRedisConnection defConnection = (DefaultStringRedisConnection) connection;
            List<String> value = defConnection.bLPop(timeout, keys);
            log.info("bLPop blocked left pop, queues: {}, value: {}", keys, value);
            return value;
        }, true);
    }

(3)数据结构

List的数据结构为快速链表,当列表元素较少的情况下使用的是连续的存储空间进行存储被称为zipList(压缩链表),当元素较多的时候会转换成quickList = 链表+zipList
在这里插入图片描述

3、集合(Set)

(1)介绍

该类型与java中的hashSet结构类型,底层存储结构也是hash表,与HashSet有相同的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集和差集等操作

(2)常用命令

  • SADD key member …
    向key中添加一个或多个元素
  • SREM key member …
    移除key中指定的若干个元素
  • SCARD key
    返回key中的元素个数
  • SISMBMBER key member
    判断一个是否咋key中存在
  • SMEMBERS key
    获取key的所有元素
  • SINTER key1 key2 …
    求交集
  • SDIFF key1 key2 ….
    求差集
  • SNUION key1 key2 …
    求并集

(3)数据结构

底层使用的是hash表结构

4、哈希(Hash)

(1)介绍

hash是一个String类型的field(字段)和value(值)的映射表,适合用于对象存储。

(2)常用命令

  • HSET key field value
    添加或者修改hash类型key的field的值
    格式:
    在这里插入图片描述
    Demo:
    在这里插入图片描述

  • HGET key field
    获取一个hash类型key的field的值
    格式:
    在这里插入图片描述
    Demo:
    在这里插入图片描述

  • HMSET
    添加多个hash类型key的field的值
    格式
    在这里插入图片描述

  • HMGET
    批量获取多个hash类型key的field的值
    格式:
    在这里插入图片描述
    Demo:
    在这里插入图片描述

  • HGETALL
    获取一个hash类型的key中的所有的field和value
    格式:
    在这里插入图片描述

    • HKEYS
      获取一个hash类型的key中的所有field
      格式:
      在这里插入图片描述
  • HVALS
    获取一个hash类型的key中的所有value
    格式:
    在这里插入图片描述
    Demo:
    在这里插入图片描述

  • HINCRBY
    让一个hash类型key的字段值自增并指定步长

  • HSETNX
    添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
    格式 :
    在这里插入图片描述

(3)数据结构

Hash类型对应的数据结构有两种:zipList(压缩表)、hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable

5、有序集合(Zset)

(1)介绍

Redis的SortedSet是一个可排序的set集合,与java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加hash表。SortedSet具备特性:

  • Redis有序集合zset与普通set非常相似,是一个没有重复元素的字符串集合
  • 不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复的。
  • 因为元素是有序的,所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。
  • 因为SortedSet的可排序的特性,经常被用来实现排行榜这样的功能。

(2)常用命令

  • ZADD key score member
    添加一个或多个元素到sorted set,如果已经存在则更新其score值
    格式:
    在这里插入图片描述
    Demo:
    在这里插入图片描述

  • ZREM key member
    删除sorted set中的一个指定元素

  • ZSCORE key member
    获取sorted set中指定元素的score值

  • ZRANK key member
    获取sorted set中的指定元素的排名
    格式:
    在这里插入图片描述
    Demo:
    在这里插入图片描述

  • ZCARD key
    获取sorted set中的元素个数
    格式:
    在这里插入图片描述
    Demo:
    在这里插入图片描述

  • ZCOUNT key min max
    统计score值在给定范围内的所有元素的个数

  • ZINCRBY key increment member
    让sorted set中的指定元素自增,步长为指定的increment的值

  • ZRANGE key min max
    按照score排序后,获取指定排名范围内的元素

  • ZRANGEBYSCORE key min max
    按照score排序后,获取指定score范围内的元素

  • ZDIFF、ZINTER、ZUNION
    求差集、交集、并集

(3)数据结构

zset底层使用了两个数据结构:

  • SkipList,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。
  • hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。

参考

  • https://www.bilibili.com/video/BV1XZ4y1b74s?p=2&vd_source=cd03889ff27e1a185b3e97e3ed96d260
  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉成226

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值