1. Redis通用命令(终端)
- keys:查看符合模版的所有key
- del:删除一个指定的key
- exists:判断一个key是否存在
- expire:给一个key设置有效期,到期后自动删除
- ttl:查看一个key的存活时间
- 如果设置一个key没有设置过期时间,默认为永久有效
1.1 key层级
Redis的key允许有多个单词形成层级结构,多个单词用 : 隔开,类似于:
项目名:业务名:类型:id
2. Redis数据结构
Redis是一种键值型(key-value)数据库,key一般是String类型,value类型多种多样,常见的value类型如下:
- 基本类型
- String
- Hash
- List
- Set
- SortedSet
- 特殊类型
- GEO
- BitMap
- HyperLog
2.1 String类型
String作为value,主要有三种形式:
- 字符串
- int
- float
主要命令有以下几种:
- set:添加或修改一个String类型的键值对
- get:根据key获取String类型的value
- mset:批量添加多个键值对
- mget:根据多个key获取多个String类型的value
- incr:让一个key对应的整型String value进行自增
- incrby:让一个key对应的整型String value自增并指定步长
- incrbyfloat:让一个key对应的浮点型String value数字自增并指定步长
- setnx:添加一个String类型的键值对,前提是这个key不存在,否则不执行
- setex:添加一个String类型的键值对,并制定有效期
2.2 Hash类型
也叫散列,value是一个无序列表,类似于java中的HashMap<fileld, value>
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD
常用命令:
- hset key field value:添加或修改hash类型key的filed对应的value
- hget key filed:获取一个hash类型key的field的值
- hmset:批量添加多个hash类型key的field的值
- hmget:批量获取多个hash类型key的field的值
- hgetall:获取一个hash类型的key中所有的filed和value
- hkeys:获取一个hash类型的key中所有的filed
- hvals:获取一个hash类型的key中所有的value
- hincrby:让一个hash类型key的field的value自增并指定步长
- hsetnx:添加一个hash类型的key的field,前提是这个filed不存在,否则不执行
2.3 List类型
类似于java中的LinkedList,可以看做一个双向链表结构,支持正向检索也支持反向检索
特征:
- 有序
- 元素可以重复
- 插入、删除速度快
- 查询速度一般
常用命令:
- lpush:向列表左侧插入一个或多个元素
- lpop:移除并返回列表左侧第一个元素,没有则返回nil
- rpush:向列表右侧插入一个或多个元素
- rpop:移除并返回列表右侧第一个元素,没有则返回nil
- lrange key start end:返回一段范围内的所有元素
- blpop和brpop:和lpop、rpop类似,在没有元素时等待指定时间,而不是直接返回nil
- 如何用List模拟栈
- 入口和出口在同一边
- 如何用List模拟队列
- 入口和出口在不同边
- 如何用List模拟阻塞队列
- 入口和出口在不同边
- 出队时采用blpop或brpop
2.4 Set类型
类似Java中的HashSet
特征:
- 无序
- 元素不可重复
- 查找快
- 支持交集、并集、差集等功能
常用命令:
- sadd:向set中插入一个或多个元素
- srem:移除set中的指定元素
- scard:返回set中元素的个数
- sismember:判断一个元素是否存在于set中
- smembers:获取set中所有元素
- sinter:求两个set之间的交集
- sdiff:求两个set之间的差集
- sunion:求两个set的并集
2.5 Sorted Set类型
是一个可排序的set集合,功能上上与Java的TreeSet类似,但是底层数据结构是不一样的。Sorted Set中每一个元素都带有一个score属性,可以基于score对元素排序,底层的实现是一个跳表(skipList)加hash表
特征:
- 可排序
- 元素不重复
- 查询速度快
常见命令:
- zadd key score member:添加一个或多个元素到Sorted Set,如果已经存在则更新其score
- zrem key member:删除Sorted Set中的一个指定元素
- zscore key member:获取Sorted Set中指定元素的score
- zrank key member:获取Sorted Set中指定元素的排名
- zcard key:获取Sorted Set中的元素个数
- zcount key min max:统计score在给定范围内所有元素的个数
- zincrby key increment member:让Sorted Set中的·1·指定元素自增,步长为指定increment
- zrange key min max:按照score排序后,获取指定排名范围内的元素
- zrangebyscore key min max:按照score排序后,获取指定score内的元素
- zdiff、zinter、zunion:求差集、交集、并集
注意:所有的排名默认都是升序,如果要降序则在命令的z后面加rev即可