redis学习总结

    技术2022-07-10  206

    目录

    1 简介

    2 数据类型-常用命令

    2.1 key键

    2.2 string

    2.3 list

    2.4 hash

    3 redis事务


    1 简介

    Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

    Redis 与其他 key - value 缓存产品有以下三个特点:

    Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。

    2 数据类型-常用命令

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

    2.1 key键

    Redis key是二进制安全的,可以使用任何二进制序列作为key。空字符串也是有效的键。

    1 DEL

    删除键和关联的值(无论该值是什么),如果给定的键不存在,则不会对此键执行任何操作。该命令返回已删除的键的数量。

       

    2 EXISTS

    测试指定的key是否存在。如果存在,则命令返回“1”,否则返回“0”。请注意,即使将键设置为空字符串也将返回“1”。         

    3 TYPE

    以字符串形式返回键处存储的值的类型。类型可以是“none”,“string”,“list”,“set”之一。如果key不存在,则返回“none”。

    2.2 string

    最redis基本的数据类型,最大能存储 512MB,且string 类型是二进制安全的,可以包含任何数据

    1 GET/SET

    获取/设置指定key的值

    如果键已与非字符串值相关联,SET仍将替换已存储在键中的任何现有值。

    2 SETNX

    如果键已经存在,则不执行任何操作。SETNX的实际含义是“ SET if Not exists”。设置成功返回1,否则返回0

    3 SETEX/PSETEX

    为指定的 key 设置值及其过期时间,等价于

    SET mykey value EXPIRE mykey seconds

    PSETEX与SETEX功能相似,唯一区别为PSETEX设置过期时间单位为毫秒,等价于

    SET mykey value PEXPIRE mykey milliseconds

    4 TTL

    返回具有超时的键的剩余生存时间(以秒为单位)

    -2如果key不存在,则命令返回。-1如果key存在但没有关联的过期时间,该命令将返回。

       

    5 INCR/DECR

    将存储在密钥处的数字增加或减少一。如果键不存在或包含错误类型的值,则在执行递增或递减操作之前,请将键设置为“ 0”

    6 INCRBY/DECRBY

    将存储在密钥处的数字增加或减少指定整数。如果键不存在或包含错误类型的值,则在执行递增或递减操作之前,请将键设置为“ 0”

        

    2.3 list

    Redis列表是通过链接列表实现的。这意味着即使列表中有数百万个元素,在列表的开头或结尾添加新元素的操作也会在固定时间内执行。链表头插和尾插速度较快,访问速度不是那么快(其中操作需要的工作量与所访问元素的索引成比例)

    弹出所有元素后,键不再存在

    优势:

    Redis列表是用链接列表实现的,因为对于数据库系统而言,至关重要的是能够以非常快的方式将元素添加到很长的列表中;Redis列表可以在恒定的时间内以恒定的长度获取。

    1 LPUSH/RPUSH

    将字符串值添加到存储在key处的列表的开头(RPUSH)或结尾(LPUSH)。如果键不存在,则会在追加操作之前创建一个空列表。如果键存在但不是列表,则返回错误。

        

    2 LRANGE

    时间复杂度:O(n)(其中n为范围的长度)

    返回存储在指定键处的列表的指定元素。开始和结束是从零开始的索引,0是列表的第一个元素(列表头),1是下一个元素,依此类推。start和end也可以是负数,指示与列表末尾的偏移量,-1是列表的最后一个元素,-2是倒数第二个元素,依此类推。

    索引超出范围将不会产生错误:如果start在列表的末尾,或者start > end,则返回一个空列表。

    可见:RPUSH在列表的右侧附加了元素,而LPUSH在列表的左侧附加了元素。(可理解为序列增加的方向为头)

    3 LPOP/RPOP

    弹出元素是同时从列表中检索元素和从列表中删除元素的操作。以原子方式返回并删除列表的第一个(LPOP)或最后一个(RPOP)元素。例如,如果列表包含元素“ a”,“ b”,“ c”,则LPOP将返回“ a”,并且列表将变为“ b”,“ c”。如果键不存在或列表已经为空,则返回特殊值“ nil”。

    4 LTRIM

    时间复杂度:O(n)(其中n为列表的len-范围的len)

    修剪现有列表,使其仅包含指定范围的指定元素。

    2.4 hash

     

     

    3 redis事务

    Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

    批量操作在发送 EXEC 命令前被放入队列缓存。收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

    一个事务从开始到执行会经历以下三个阶段,如图所示

    开始事务。命令入队。执行事务。

    事务命令:MULTI(事务的开始)/EXEC(事务执行)

        

    Redis中单个命令的执行是原子性,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的,所以事务中有任意命令执行失败,不会回滚。Redis在内部得到了简化和更快,因为它不需要回滚的能力。

    Processed: 0.012, SQL: 9