目录
1 简介
2 数据类型-常用命令
2.1 key键
2.2 string
2.3 list
2.4 hash
3 redis事务
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
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 seconds
PSETEX与SETEX功能相似,唯一区别为PSETEX设置过期时间单位为毫秒,等价于
SET mykey value
PEXPIRE mykey milliseconds
4 TTL
返回具有超时的键的剩余生存时间(以秒为单位)
-2
如果key不存在,则命令返回。-1
如果key存在但没有关联的过期时间,该命令将返回。5 INCR/DECR
将存储在密钥处的数字增加或减少一。如果键不存在或包含错误类型的值,则在执行递增或递减操作之前,请将键设置为“ 0”
6 INCRBY/DECRBY
将存储在密钥处的数字增加或减少指定整数。如果键不存在或包含错误类型的值,则在执行递增或递减操作之前,请将键设置为“ 0”
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 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
一个事务从开始到执行会经历以下三个阶段,如图所示
事务命令:MULTI(事务的开始)/EXEC(事务执行)
Redis中单个命令的执行是原子性,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的,所以事务中有任意命令执行失败,不会回滚。Redis在内部得到了简化和更快,因为它不需要回滚的能力。