Redis基础命令
Redis基础命令
Redis数据结构介绍
redis是一个key-value的数据库,key一般是String类型,但是value的类型多种多样
前五种是基本类型:
- String:Hello World
- Hash:
- List:[A->B->C]
- Set:
- SortedSet:
- GEO:
- BitMap:0100011101001010101
- HyperLog:0100011101001010101
Redis通用命令
添加或修改键值对
set age 21
获取key对应的value
get age
查询所有key
KEYS *
删除key
DELETE key1 key2 ...
判断key是否存在
EXISTS age
给key设置有效期20秒,有效期到自动删除
EXPIRE age 20
查看一个key的剩余有效期,返回值为正数表示秒,-2表示已删除,-1表示永久有效
TTL age
String类型
批量添加
MSET k1 v1 k2 v2 k3 v3
批量获取
MGET k1 k2 k3
自增
INCR age
指定步长自增自减
INCRBY age -2
浮点型数字指定步长自增
set score 10.1
INCRBYFLOAT score 0.5
添加一个键值对,不存在才添加
set age 21
SETNX age 21
添加一个键值对,并设置有效期
SETEX name1 10 Jack
key的层级结构
redis的key允许多个单词形成层级结构,多个单词之间用':'隔开,如下是xust公司id为1和2的user,xust公司id为1和2的狗
set xust:user:1 '{"id":1,"name":"Jack","age":21}'
set xust:user:2 '{"id":2,"name":"Jhon","age":13}'
set xust:dog:1 '{"id":1,"name":"AHuang","age":2}'
set xust:dog:2 '{"id":2,"name":"ABai","age":5}'
Hash类型
String类型将对象序列化为Json字符串后存储,修改某个字段时不方便
xust:user:1 {"id":1,"name":"Jack","age":21}
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD
field value
xust:user:1 name Jack
age 21
添加或修改hash类型key的field的值
HSET xust:user:3 name Lucy
HSET xust:user:3 age 12
获取一个hash类型key的field的值
HGET xust:user:3 age
批量添加多个hash类型key的field的值
HMSET xust:user:4 name Tim age 14 sex man
批量获取多个hash类型key的field的值
HMGET xust:user:4 name age sex
获取一个hash类型key中所有field和value
HGETALL xust:user:4
获取一个hash类型key中所有field
HKEYS xust:user:4
获取一个hash类型key中所有value
HVALS xust:user:4
让一个hash类型key的字段值自增并指定步长
HINCRBY xust:user:4 age 2
添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
HSETNX xust:user:4 age 21
List类型
类似Java中的LinkedList,可以看作是一个双向链表,既支持正向检索也支持反向检索
特征也与LinkedList类似:
- 有序、
- 元素可以重复‘
- 插入删除块
- 查询速度一般
常用来存储有序数据,如朋友圈点赞列表
向列表左侧插入一个或多个元素
LPUSH users 1 2 3
移除并返回列表左侧第一个元素,没有则返回nil
LPOP users 1
向列表右侧插入一个或多个元素
RPUSH users 4 5 6
移除并返回列表右侧第一个元素
RPOP users 1
返回一段角标范围内所有元素
LRANGE users 1 3
BLPOP和BRPOP与LPOP和RPOP类似,只是没有元素时等待指定时间,不是直接返回nil
等待20秒
BLPOP users 20
使用LPUSH+LPOP或RPUSH+RPOP可模拟栈
使用LPUSH+RPOP或RPUSH+LPOP可模拟队列
Set类型
类似Java中的HashSet,可看作一个value为null的HashMap
具备与HashSet类似的特征:
- 无序
- 元素不可重复
- 查找快
- 支持交集、并集、差集等功能
向set中添加一个或多个元素
SADD s1 a b c
移除set中指定元素
SREM s1 a
返回set中元素个数
SCARD s1
判断一个元素是否存在于set中
SISMEMBER s1 b
获取set中所有元素
SMEMBERS s1
求两个集合的交集
SINTER s1 s2
求两个集合的差集
SDIFF s1 s2
求两个集合并集
SUNION s1 s2
SortedSet类型
一个可排序的set集合,类似Java中的TreeSet,但底层数据结构差别很大。SortedSet每一个元素都带有一个score属性,可基于score排序,低层实现是一个跳表(SkipList)加hash表
SortedSet具备下列特性:
- 可排序
- 元素不重复
- 查询速度快
经常被用于实现排行榜
添加一个或多个元素到sorted set,若已经存在则更新score值
ZADD students 85 Jack 89 Lucy 82 Rose 95 Tom 78 Jerry 92 Amy 76 Miles
删除sorted set中一个指定元素
ZREM students Tom
获取sorted set中指定元素的score值
ZSCORE students Jack
获取sorted set中指定元素的排名,从0开始
ZRANK students Rose
获取sorted set中元素个数
ZCARD students
统计score值在给定范围内的元素个数
ZCOUNT students 0 80
让sorted set中指定元素指定步长自增
ZINCRBY students 2 Jack
按照score排名后获取指定排名范围内的元素
ZRANGE students 0 2
按照score排名后获取指定score范围内的元素
ZRANGEBYSCORE students 0 80
求差集,交集,并集与之前类似
排名默认都是升序,Z后添加REV为倒序,如ZRANGE-->ZREVRANGE