Redis常见命令
-
Redis数据结构
- Redis是一个key-value的数据库,key一般是String类型,value的类型如下
- 基本类型
- String
- Hash
- List
- Set
- SortedSe
- 特殊类型
- GEO
- BitMap
- HyperLog
- 基本类型
redis将操作不同数据类型的命令做了分组,在官网可以查到不同的命令(https://redis.io/commands/),也可通过help命令来查询
- Redis是一个key-value的数据库,key一般是String类型,value的类型如下
-
Redis通用命令
- keys:查看符合模板的所有key,不建议在生产环境设备上使用
- del:删除一个指定的key
- exists:判断key是否存在
- expire:给一个key设置有效期,有效期到期时该key会被自动删除
- ttl:查看一个key的剩余有效期
通过help [command]可以查看一个命令的具体用法
String类型
String类型是Redis中最简单的存储类型,底层以字符数组形式存储,最大存储空间不超过512m,根据字符串的格式不同,可以分为
- string:普通字符串
- int:整数类型,可以做自增自减
- float:浮点类型,可以做自增自减
String类型常用命令
- SET:天剑或者修改已经存在的一个String类型的键值对
- GET:根据key获取String类型的value
- MSET:批量添加多个String类型的键值对
- MGET:根据多个key获取多个String类型的value
- INCR:让一个整型key自增1
- INCRBY:让一个整型key自增并指定步长
- INCRBYFLOAT:让一个浮点类型数字自增并设定步长
- SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
- SETEX:添加一个String类型的键值对,并且指定有效期
-
redis没有类似mysql中的table的概念,该怎样区分不同类型的key呢???
-
例如:需要存储用户、商品信息到redis,且用户id和商品id都是1
-
通过redis存储时,可以采用多个单词层级结构组成redis中的key。例如
项目名:业务名:类型:id
-
例如我们的项目叫shop,有用户(user)和商品(product)两种不同类型的数据,则key可以这样定义
- user相关的key:
stop:user:xx
- product相关的key:
stop:product:
若value是一个java对象,则可将对象进行序列化转化为JSON字符串后存储,即 stop:user:1 {“id”:1,“name”:“Jack”,“age”:21}、stop:product:1 {“id”:1.“name”:“娃哈哈”,“price”:8}
- user相关的key:
-
-
Hash类型
Hash(散列)类型是一个无序字典,类似于Java中的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:
例如:在String中存储Java对象如下
在Hash中存储Java对象如下
Hash类型常用命令
- hset:添加或者修改hash类型key的field的值
- hget:获取一个hash类型key的field的值
- hmset:批量添加多个hash类型key的field的值
- hmget:批量获取多个hash类型key的field的值
- hgetall:获取一个hash类型的key中的所有的field和value
- hkeys:获取一个hash类型的key中的所有的field
- hvals:获取一个hash类型的key中的所有的value
- hincrby:让一个hash类型key的字段值自增并指定步长
- hsetnx:添加一个hash类型的key的field值,前提是这个field不存在,l否则不执行
List类型
redis中的list类型和java中的LinkedList类似,可以看做是一个双向链表结构,特征也和LinkedList类似,常用来存储有序数据,例如,朋友圈点赞列表,评论列表等。
- 特点
- 有序
- 元素可以重复
- 插入和删除快
- 查询较慢
List类型常用命令
- lpush:向列表左侧插入一个或多个元素
- lpop:移除并返回列表左侧的第一个元素,没有则返回nil
- rpush:向列表右侧插入一个或多个元素
- rpop:移除并返回列表右侧的第一个元素
- lrange:返回一段角标范围内的所有元素
- blpop和brpop:与lpop和rpop类似,只不过在没有元素时等待指定时间,而不是直接返回nil
Set类型
redis的set和java中的HashSet类似
- 特征
- 无序
- 元素不可重复
- 查找快
- 支持交集、并集、差集等功能
Set类型的常用命令
- sadd:向set中调价一个或多个元素
- srem:移除set中指定的元素
- scard:返回set中元素的个数
- sismember:判断一个元素是否存在在set中
- smembers:获取set中的所有元素
- sinter:求交集
- sdiff:求差集
- sunion:求并集
SortedSet类型
sortedSet是一个可排序的set集合,与java种的TreeSet类似,但底层结构差别很大,sortedSet中的每个元素都带有一个score属性,可以基于score属性对元素排序,是通过调表加hash表实现的。经常用来实现排行榜等功能。注意:默认都是升序,如果要降序则在命令的z后面天剑rev即可
- 特性
- 可排序
- 元素不重复
- 查询速度快
SortedSet类型常用命令
- zadd:添加一个或多个元素到sorted set中,如果已经存在则更新其score值
- zrem:删除sorted set中的一个指定元素
- zscore:获取指定元素的socre值
- zrank:获取指定元素的排名
- zcard:获取元素个数
- zcount:统计score值在给定范围内的所有元素的个数
- zincrby:让指定元素自增
- zrange:按照score排序后,获取指定score范围内的元素
- zrangebyscore:按照score排序后,获取指定score范围内的元素
- zdiff:求差集
- zinter:求交集
- zunion:求并集
本文由mdnice多平台发布