目录
1 简介
2 数据类型-常用命令
2.1 key键
2.2 string
2.3 list
2.4 hash
3 redis事务
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
Redis key是二进制安全的,可以使用任何二进制序列作为key。空字符串也是有效的键。
1 DEL
删除键和关联的值(无论该值是什么),如果给定的键不存在,则不会对此键执行任何操作。该命令返回已删除的键的数量。
2 EXISTS
测试指定的key是否存在。如果存在,则命令返回“1”,否则返回“0”。请注意,即使将键设置为空字符串也将返回“1”。
3 TYPE
以字符串形式返回键处存储的值的类型。类型可以是“none”,“string”,“list”,“set”之一。如果key不存在,则返回“none”。
最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 secondsPSETEX与SETEX功能相似,唯一区别为PSETEX设置过期时间单位为毫秒,等价于
SET mykey value PEXPIRE mykey milliseconds4 TTL
返回具有超时的键的剩余生存时间(以秒为单位)
-2如果key不存在,则命令返回。-1如果key存在但没有关联的过期时间,该命令将返回。
5 INCR/DECR
将存储在密钥处的数字增加或减少一。如果键不存在或包含错误类型的值,则在执行递增或递减操作之前,请将键设置为“ 0”
6 INCRBY/DECRBY
将存储在密钥处的数字增加或减少指定整数。如果键不存在或包含错误类型的值,则在执行递增或递减操作之前,请将键设置为“ 0”
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)
修剪现有列表,使其仅包含指定范围的指定元素。
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
批量操作在发送 EXEC 命令前被放入队列缓存。收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。一个事务从开始到执行会经历以下三个阶段,如图所示
开始事务。命令入队。执行事务。事务命令:MULTI(事务的开始)/EXEC(事务执行)
Redis中单个命令的执行是原子性,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的,所以事务中有任意命令执行失败,不会回滚。Redis在内部得到了简化和更快,因为它不需要回滚的能力。