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

热门相关:无量真仙   霸皇纪   大神你人设崩了   大神你人设崩了   霸皇纪