Redis是一个非关系型数据库
Redis特点
- 键值型(key,value结构),value支持多种不同的数据结构
- 单线程,每个命令都具有原子性(Redis6.0的多线程是指网络处理多线程,其核心的线程还是单线程)
- 低延迟,速度快(基于内存存储、IO多路复用)
- 支持数据持久化(RDB、AOF两种方式)
- 支持多语言客户端
关系型数据库与非关系型数据库的区别
- 关系型数据库数据存储在硬盘中,非关系型数据库数据存储在内存中
- 关系型数据库库表与表之间存在关联关系,非关系型数据库没有这种关联关系,这是由它的数据结构决定的,如:键值型、文档型
- 速度,关系型数据库数据存在硬盘上,所以速度远没有非关系数据库快
- 规范,关系型数据库都有一个统一的规范(SQL),非关系数据库则没有这种同一个的规范,它们都有各自的语法,这无疑是加大了学习的成本
Redis的通用语法
| 语 法 | 说 明 |
|---|
| keys * | 查询出所有的键,可以在 * 的前后加一些限制只显示匹配的,如:keys student* 就是显示所有student的键 |
| type key | 获取指定键的value是什么类型的,如:type name 就是查看name这个键它的值是什么数据类型 |
| del key | 删除指定的键,如:del name,删除name这个键以及它的值 |
| exists key | 查看一个键是否存在,可以一次接受多个,如:exists name 查看name这个是否存在于库中;返回结果 0 没有,1 以及存在 |
| expire key seconds | 给一个执行的键设置有效期,单位是秒,到期后对应的键会自动删除,如:expire name 30 表示给name这个键设置一个30秒的有效期 |
| ttl key | 查看一个键的剩余有效期,如:ttl name 表示产看name这个键的有效期 |
数据结构
String类型
| 语 法 | 说 明 |
|---|
| set key value | 添加或修改一个String类型的键值对,如:set name '张三' |
| get key | 根据key获取String类型的value,如:get name |
| mset key1 value1 key2 value2… | 批量添加多个String类型的键值对,如:mset k1 v1 k2 v2 |
| mget key1 key2 | 根据多个key获取多个String类型的value,如 mget k1 k2 |
| incr key | 根据key,让其value自增1(前提value存的是数字),如:incr num |
| incrby key number | 根据key,让其value自增自定步长,如:incrby num 2 让num的值增加2 |
| setnx key valye | 添加一对键值对,前提是这个key不存在,否则不执行,如:setnx k1 v1 |
| setex key value seconds | 添加一对键值对,并指定有效期,如:setex k1 v1 30 |
注:如果存入的是数字,它实际存储的类型就是数字
Hash结构类型
| 语 法 | 说 明 |
|---|
| hset key field value | 添加或修改hash类型的可以的field的值 |
| hget key field | 获取一个hash类型key的field的值 |
| hmset key field1 value1 field2 value2… | 批量添加多个hash类型的field |
| hmget key | 获取多个hash类型的field的值 |
| hgetall key | 获取一个hash类型的所有field和value |
| hkeys key | 获取一个hash类型的所有field和value |
| hkeys key | 获取一个hash类型的所有field |
| hvals | 获取一个hash类型的所有value |
| hincrby key field number | 让一个hash类型的field的value自增并指定步长 |
| hsernx key field | 添加一个hash类型的field值,前提是这个field不存在,否则不执行 |
Hash数据结构类型
Redis中的List类型与Java的LinkedList类似,可以看作一个双向链表结构;即可以支持正向检索也可以支持反向检索,特征也与LinkedList类似
| 语 法 | 说 明 |
|---|
| lpush key element… | 向列表的左侧插入一个或多个元素 |
| lpop key | 移出并返回列表左侧的第一个元素,没有分会nil |
| rpush key element… | 向列表的右侧插入一个或多个元素 |
| rpop | 移出并返回右侧的第一个元素 |
| lrange key start end | 返回一段角标范围内的所有元素 |
| blpop和brpop | 与lpop和rpop类似,只不过在没有元素时会等待指定时间,而不是直接返回nil |
Set类型
特点:无序、不可重复、查找快、支持交集|并集|差集等功能
| 语 法 | 说明 |
|---|
| sadd key member… | 向set中添加一个或多个元素 |
| srem key menber… | 移除set中的指定元素 |
| scard key | 返回set中元素个数 |
| sismember key member | 判断一个元素是否存在于set中 |
| smembers key | 获取set中的所有元素 |
| sinter key1 key2… | 求key1与key2的交集 |
| sdiff key1 key2… | 求key1与key2的差集 |
| sunion key1 key2… | 求key1与key2的并集 |
SortedSet类型
特点:是一个可排序的set集合,SortedSet中的每一个元素带有一个score属性,可以基于score属性对元素排序,底层的实现是一个调表(SkipList)加 hash 表;可排序、元素不可重复、查询速度快
| 语 法 | 说 明 |
|---|
| zadd key score member | 添加一个或多个元素到sorted set,如果已经穿在则更新其score值 |
| zrem key member | 删除sorted set中的一个指定元素 |
| zscored key member | 获取sorted set中的指定元素的 score 值 |
| zrank key member | 获取sorted set中指定元素的排名 |
| zcard key | 获取sorted set中的元素个数 |
| zcount key min max | 统计score值在给定范围没得所有元素个数 |
| zincrby key number member | 让sorted set中指定元素的sorted自增指定步长(number) |
| zrange key min max | 按照score排序后,获取指定排名范围内的元素 |
| zrangebyscore key min max | 按照score排序后,获取指定score范围内元素 |
| zdiff、zinter、zuninon | 求差集、交集、并集 |