Redis: Redis介绍

文章目录

  • 一、redis介绍
  • 二、通用的命令
  • 三、数据结构
    • 1、字符串类型(String)
      • (1)介绍
      • (2)常用命令
      • (3)数据结构
    • 2、列表(List)
      • (1)介绍
      • (2)常用命令
      • (3)数据结构
    • 3、集合(Set)
      • (1)介绍
      • (2)常用命令
      • (3)数据结构
    • 4、哈希(Hash)
    • 5、有序集合(Zset)

一、redis介绍

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

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

二、通用的命令

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

  • help [command]
    查看一个命令的具体用法
    Redis: Redis介绍_第1张图片
  • keys *
    查看库中的所有key或符合模板的所有key。
    Redis: Redis介绍_第2张图片
  • 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
    添加或者修键值对
    Redis: Redis介绍_第3张图片
  • mset key value [key value …]
    批量添加键值对
  • get key
    根据key获取value
  • mget key [key …]
    根据多个key获取多个value
    Redis: Redis介绍_第4张图片
  • incr
    让一个整型的key自增1,相当于java中的i++
  • incrby
    让一个整数按照指定的步长增长
  • incrbyfloat
    让一个浮点类型的数字按照指定步长增长
  • setnx
    设置键值对,如果该key存在则不执行。
    Redis: Redis介绍_第5张图片
  • msetnx
    当key都不存在时,可以同时设置多个键值对,且该操作具有原子性,如果有一个设置失败,则都失败。
    Redis: Redis介绍_第6张图片
  • setex
    添加一个String类型的键值对,并且指定有效期
  • getrange
    字符串截取,类似于java中的subString操作
    Redis: Redis介绍_第7张图片
  • setrange
    Redis: Redis介绍_第8张图片
  • getset
    Redis: Redis介绍_第9张图片

(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最左边或最右边的第一个元素。此外还可以在指定的时间内获取列表中的元素,如果在指定的时间内没有元素则阻塞等待。
    Redis: Redis介绍_第10张图片
    SpringBoot中代码应用:
 public List pop(List keys, int timeout) {
        return stringRedisTemplate.execute(connection -> {
            Assert.isTrue(connection instanceof DefaultStringRedisConnection, "Connection is not DefaultStringRedisConnection!");
            DefaultStringRedisConnection defConnection = (DefaultStringRedisConnection) connection;
            List 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)

5、有序集合(Zset)

你可能感兴趣的:(redis)