redis本身是一个Map,其中所有的数据都是采用键值对的形式存储,其中常用的数据类型有五种:string,hash,list,set,sorted_set
String
- 数据类型:string中存储的是单个数据,通常是字符串,是最简单的数据存储类型,也是最常用的数据类型,如果字符串以整数的形式展示,可以进行对应的数字操作
- 基本操作
- 添加/修改数据 set key value(单个数据) mset key1 value1 key2 value2 ...(多数据)append key value(追加信息,不存在则新建)
- 获取数据 get key(单个数据) mget key1 key2...(多数据)
- 删除数据 del key
- 获取数据字符个数 strlen key
- 增加数值数据的值 incr key(加1) incrby key increment(增加指定整数值) incrbyfloat key increment (增加指定float值)
- 减少数据数值的值 decr key(减1)decrby key increment(减少指定整数值)
- 是否多数据操作一定比但数据操作块:不一定,当一次操作数据过多时,数据传输需要时间较长,需视情况而定
- 增加,减少操作值可为负数
- 按数值进行操作时,若原始数据不能转换为数值,或超越了redis数值上限,将报错,数值范围为java中long型的范围
- 扩展操作
- 设置数据具有指定生命周期 setex key seconds values(指定秒数) psetex key milliseconds values(指定毫秒数)
Hash
- 数据类型:底层使用哈希表实现数据存储,一个存储空间保存多个键值对数据,典型应用为存储对象信息
- 基本操作
- 添加/修改数据 hset key field value(单个数据) hmset key field1 value1 field2 value2...(多个数据) hsetnx key field value(如果不存在该字段,创建并执行hset操作,如果已存在,操作无效)
- 获取数据 hget key field(单个数据) hmget key field1 field2 ...(多数据) hkeys key(获取所有字段名) hvals key(获取所有字段值) hgetall key(获取所有键值对)
- 删除数据 hdel key field
- 获取字段的数量 hlen key
- 判断是否存在指定字段 hexists key field
- 增加指定字段值 hincrby key field increment hincrbyfloat key field increment
- hash类型下的value只能存储字符串,不能嵌套存储
- hgetall操作可以获取全部属性,如果内部field过多,遍历整体数据效率会很低,可能会称为数据访问的瓶颈
List
- 数据类型:有序存储多个数据,底层使用双向链表存储结构实现
- 基本操作
- 添加/修改数据 lpush key value1(从左添加数据) rpush key value1(从右添加数据)
- 获取数据 lrange key start top(获取指定范围内数据) lindex key index(获取指定索引数据) llen key(获取数据数目)
- 获取并移除数据 lpop key(从左边取出数据) rpop key(从右边取出数据)
- 规定时间内获取并移除数据 blpop key timeout brpop key timeout brpoplplush source destination timeout(从列表中弹出数据并存入到另一个列表中,如无对应数据,会等待超时或发现对应数据)
- 移除指定个数的指定数据 lrem key count value
- list具有索引的概念,通常以队列的形式或栈的形式操作数据
- 获取全部数据的操作技术索引为-1
- list可用于对数据进行分页操作
Set
- 数据类型:与hash存储结构完全相同,进存储键值,不允许重复,存储结构机制高效,便于查询
- 基本操作
- 添加数据 sadd key member
- 获取数据 smembers key(获取所有数据) scard key(获取集合数据总数) srandmember key count(随机获取集合中指定数量的数据) spop key count(随机获取数据并移除集合)
- 删除数据 srem key member
- 判断集合中是否包含指定数据 sismember key member
- 求两个集合的交,并,差集 sinter key1 key2(交集) sunion key1 key2(并集) sdiff key1 key2(差集)
- 求两个集合的交,并,差集并存储到指定集合中 sinterstore destination key1 key2 sunionstore destination key1 key2 sdiffstore destination key1 key2
- 将指定数据从原始集合中移动到目标集合中 smove source destination member
- set虽然与hash的存储结构相同,但是无法启用hash中存储值的空间
Sorted_set
- 基本操作
- 添加数据 zadd key score1 member 1 [score2 member2 ]
- 获取全部数据 zrange key start stop (获取从小到大排序的指定范围的值) zrevrange key start stop(获取从大到小排序的指定范围的值)
- 删除数据 zrem key member [member ...]
- 按条件获取数据 zrangebyscore key min max zrevrangebyscore key max min
- 按条件删除数据 zremrangebyrank key start stop zremrangebyscore key min max
- 获取集合数据总量 zcard key zcount key min max
- 获取数据对应的索引 zrank key number zrevrank key number
- score值获取与修改 zscore key number (获取指定数据的score) zincrby key increment member(修改指定数据的score)
- score保存的数据可以是一个双精度的double值,可能会丢失精度
- sorted_set还是基于set结构的,因此数据不能重复