简介
redis常见的数据结构和他们的常用方法
redis的数据结构
redis是一个key-value的nosql,key一般是字符串,value有很多的类型。
j基本类型:
- string
- hash
- list
- set
- sortedSet
特殊类型:
- GEO
- BitMap
- HyperLog
key的结构
可以使用多个单词,中间使用:隔开来形成层级结构
例如 :
school:student:1
school:teacher:1
在图形界面可以查看到层级结构
redis的常用通用命令
可以使用help @generic
查看全部的通用命令的帮助文档,也可以使用help 具体命令
查看具体命令的帮助文档。
下面是一些常用的通用命令
keys
可以接通配符,如
keys *:查看所有的key。
keys n * :查看所有n开头的key
注意:不建议在生产环境下使用
del
del key名:删除key,可以同时删除多个
exist
exist key名:查看指定key是否存在,存在返回1,不存在返回0。
expire
expire key名 时间(秒):给一个key设置有效时间,到了有效时间改key会删除。
ttl
ttl key名:查看key剩余有效时间,-1表示永久有效,-2表示已过期
String类型
是redis中最简单的存储类型。但根据字符串的格式,可以分为
- string:普通字符串
- int:整型,可进行自增自减操作
- float:浮点类型,可进行自增自减操作
它们的底层都是字节形式存储,只是编码方式不同
常用命令:
- set:添加键值对或修改已经存在的key的value
- get:根据key获得value
- mset:批量添加键值对
- mget:根据多个key获得多个value
- incr:整型类型的数字自增长1
- incrby:整型类型的数字自增长,指定增长值,加上负数就是自减
- incrbyfloat:浮点类型的数字自增长,可以指定增长值
- setnx:添加一个string类型的键值对,这个key要不存在,否则不执行。
- setex:添加一个string类型的键值对,并指定有效期
hash类型
也叫散列,其value是个无序字典
常用命令
- hset key名 字段名 value值:添加或者修改hash类型的key的字段的值
- hget key名 字段名:获取hash类型的字段的值
- hmset:批量添加多个hash类型的key的字段的值
- hmget:批量获取多个hash类型的key的字段的值。
- hgetall:获取一个hash类型的key中的所有的field字段和value值。
- hkeys:获取一个hash类型的key中的所有的field字段。
- hvals:获取一个hash类型的key中的所有的value值。
- hincrby:让一个hash类型key的字段值自增并指定步长。
- hsetnx:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行。
list类型
和Java中的linkedlist类似,支持正向检索和反向检索。
特点:
- 有序
- 元素可重复
- 插入和删除快,查询一般
常用命令
- lpush key element …:向列表左侧插入一个或多个元素。
- lpop key:移除并返回列表左侧的第一个元素,如果没有元素,则返回 nil。
- rpush key element …:向列表右侧插入一个或多个元素。
- rpop key:移除并返回列表右侧的第一个元素。
- lrange key start end:返回列表中指定区间内的元素,起点包括,终点不包括。
- blpop和 brpop :这两个命令类似于 LPOP 和 RPOP,但在没有元素的时候会阻塞等待指定的时间,而不是立即返回 nil。
set类型
和Java中的hashset类似
特点:
- 无序
- 元素不可重复
- 查询快
- 可以进行交集,并集的操作
常用命令
- sadd key member …:set中添加一个或多个元素
- srem key member…:溢出set中指定的元素
- scard key:返回set中的元素的个数
- sismember key member:判断一个元素是否存在于set中
- smembers:获取set中的所有元素
- sinter key1 key2…:key1和key2的交集,共同拥有的部分
- sdiff key1 key2 …:key1和key2的差集,key1有key2没有的部分
- sunion key1 key2…:key1和key2的并集,key1和key2的加起来
sortedset类型
可排序的set组合,它的每一个元素都带有score属性,可以基于这个score属性对元素进行排序。
特点:
- 可排序
- 元素不可重复
- 查询速度快
常用命令
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中的指定元素自增,步长为指定的increment值
zrange key min max:按照score排序后,获取指定排名范围内的元素
zrangebyscore key min max:按照score排序后,获取指定score范围内的元素
zdiff:差集
zinter:交集
zunion:并集
注意:这里的排序都是升序的,如果要降序,把命令的开头z换成zrev