喔,R!
Redis入门
- redis是键值数据库(非关系型/K-V/NoSql数据库)
因此,可以用复杂数据类型包装value来存储复杂数据
Remote Dictionary Server-RE DI S - NoSQL特性
- 非结构化(通过K-V)
- 无关联的(智能通过业务逻辑维护表间关系)
- 非SQL(没有通用的语法标准)
- 无事务,BASE理论(基本可用(Basically Available)、软状态(Soft-state)、最终一致性(Eventually Consistency)),难以满足ACID
- 内存存储
- 水平扩展
- 适用场景:
- 数据结构不固定
- 对一致性、安全性要求不高
- 对性能要求较高
- Redis特征
- K-V,支持数据结构较多
- 单线程,每个命令具备原子性
- 低延迟、速度快(基于内存、IO多路复用,编码良好)
- 支持数据持久化
- 支持主从集群、分片集群
- 支持多语言客户端
常用命令
- Expire Key [time(s)] 设置某键有效期(-1为永久存在,-2为已经过期)
- TTL Key 查看某键剩余有效期
- Keys Model 查看符合模板的所有key
- Del Key 删除一个指定的key
- Exists Key 查看key是否存在
Redis数据结构
Name | Example |
---|---|
String | hello |
Hash | {name:”jack”,age:21} |
List | [A->B->C->D] |
Set | {A,B,C} |
SortedSet | {A:1,B:2,C:3} |
GEO | {A:(120.3,36.2)} |
BitMap | 11011 |
HyperLog | 11011 |
Redis的层级格式
key允许使用多个词条形成层级结构,多个词条之间使用”:”隔开
层级在redis内部是真实存在的,不是通过业务分割的
String类型
字符串类型,可以根据内容不同分为三类(仍然为字符串类型)
- string 普通字符串
- int 整数
- float 浮点数
其中int和float可以进行自加/自减操作
如果要让一个key的value有很多属性,需要打包成json
常见命令:
- set 设置键值对
- get 获得键值对
- mset 批量设置键值对
- mget 批量获得键值对
- incr 让一个整型的key自增1
- incrby 让一个整型的key自增并指定步长
- incrbyfloat 让一个浮点型的key自增并指定步长
- 存在decr,但是一般都用incr加负数步长
- setnx 添加一个键值对,前提是不存在,否则不执行
- setex 添加键值对并指定有效期
键值对有效期的场景:获取短信验证码/二维码登录等
Hash类型
如果要让一个key的value有很多属性,可以分别存储
KEY (key1 value1 key2 value2…)
常见命令
- hset key field value 参考string
- hget 参考string
- hmset 参考string
- hmset 参考string(4.0后已被禁用)
- hgetall 获取一个key中的所有field和value
- hkeys 获取一个key中的所有field
- hvals 获取一个key中的所有value
- hincrby 让一个hash的key字段自增并指定步长(只能指定integer)
- hsetnx 添加一个hash类型的key的field值,前提是不存在,否则不执行
List类型
可以看作是双向链表,支持正向检索和反向检索
特征:
- 有序
- 元素可以重复
- 插入和删除较快
- 查询速度一般
常见命令:
- (L/R)PUSH key element… 向链表(左/右)侧插入一个元素
- (L/R)POP key 移除并返回(左/右)侧的第一个元素,没有则返回nil
- LRANGE key star end 返回一段角标范围内的所有元素
- B(L/R)POP 与普通类似,没有的时候会等待指定时间,不会返回nil
Set类型
底层类似Java中的HashMap
- 无序
- 数据不可重复
- 查找较快
- 支持交/并/差等功能
常用命令:
- SADD key member 添加一个或多个元素
- SREM key member 移除指定元素
- SCARD key 返回元素个数
- SISMEMBET key member 判断是否存在
- SMSMBERS 获取set中的所有元素
- SINTER set1 set2 求交集
- SDIFF set1 set2 求差集
- SUNION set1 set2 求并集
SortedSet 可排序集合
底层数据结构为跳表+hash表
每一个元素都带有score属性,根据score进行排序
- 有序
- 数据不重复
- 查询较快
常用命令:
SortedSet的常见命令有:
- ZADD key score member:添加元素,如果已经存在则更新其score值
在一个命令中添加多个元素时:1
ZADD Key score1 member1 score2 member2
- ZREM key member:删除集合中的一个指定元素
- ZSCORE key member:获取集合中的指定元素的score值
- ZRANK key member:获取集合中的指定元素的排名
- ZCARD key:获取集合中的元素个数
- ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
- ZINCRBY key increment member: 让集合中的指定元素自增,步长为指定的increment值
- ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
计数器从0开始 - ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
- ZDIFF、ZINTER、ZUNION:求差集、交集、并集
所有的查询默认为升序,如果需要降序则将命令改为ZREVxxx