Redis五大基本类型与Java集合类型的对应

String

String

Hash

HashMap

List

LinkedList

Set

HashSet

Sortet_Set

TreeSet

redis 数据存储格式

redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储
数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串

String类型

存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型

  • 存储数据的格式:一个存储空间保存一个数据
  • 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用

String 类型数据的基本操作

  • 添加/修改数据
set key value
  • 获取数据
get key
  • 删除数据
del key
  • 添加/修改多个数据
mset key1 value1 key2 value2
  • 获取多个数据
mget key1 key2
  • 获取数据字符个数(字符串长度)
strlen key
  • 追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
append key value
  • 查看所有列
keys '*'
  • 设置数值数据增加指定范围的值
incr key   自增1 
  incrby key increment  增加指定数值
  incrbyfloat key increment   增加指定数值(小数)
  • 设置数值数据减少指定范围的值
decr key   减少1
decrby key increment  减少指定数值
  • 设置数据具有指定的生命周期
setex key seconds value   	    秒
psetex key milliseconds value   分

Hash 类型

存储的困惑:对象类数据的存储如果具有较频繁的更新需求操作会显得笨重

一个key对应的不是一个值,而是一堆值,

-新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
-需要的存储结构:一个存储空间保存多个键值对数据
-hash类型:底层使用哈希表结构实现数据存储

hash 类型数据的基本操作
  • 添加/修改数据
hset key field value
  • 获取数据
hget key field
hgetall key
  • 删除数据
hdel key field1 [field2]
  • 添加/修改多个数据
hmset key field1 value1 field2 value2 …
  • 获取多个数据
hmget key field1 field2 …
  • 获取哈希表中字段的数量
hlen key
  • 获取哈希表中是否存在指定的字段
hexists key field
hash 类型数据扩展操作
  • 获取哈希表中所有的字段名或字段值
hkeys key
hvals key
  • 设置指定字段的数值数据增加指定范围的值
hincrby key field increment
hincrbyfloat key field increment
  • 只在 key 指定的哈希集中不存在指定的字段时,设置字段的值。如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。如果字段已存在,该操作无效果
hsetnx key field value

List类型

  • 数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
  • 需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
  • list类型:保存多个数据,底层使用双向链表存储结构实现
list 类型数据基本操作
  • 添加/修改数据
lpush key value1 [value2] ……   左
rpush key value1 [value2] ……   右
  • 获取数据
lrange key start stop  如果先想看全部,则用lrange key 0 -1
lindex key index    
llen key
  • 获取并移除数据
lpop key  下标第一个开始移除
rpop key  下标最后一个开始移除
  • 规定时间内获取并移除数据 (单位精准到秒)
blpop key1 [key2] timeout
brpop key1 [key2] timeout
brpoplpush source destination timeout
  • 移除指定数据
lrem key count value

Set类型

  • 新的存储需求:存储大量的数据,在查询方面提供更高的效率
  • 需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
  • set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的
set 类型数据的基本操作
  • 添加数据
sadd key member1 [member2]
  • 获取全部数据
smembers key
  • 删除数据
srem key member1 [member2]
  • 获取集合数据总量
scard key
  • 判断集合中是否包含指定数据
sismember key member
set 类型数据的扩展操作
  • 随机获取集合中指定数量的数据
srandmember key [count]
  • 随机获取集合中的某个数据并将该数据移出集合
spop key [count]
  • 求两个集合的交、并、差集
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

Sorted_set类型

  • 新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式
  • 需要的存储结构:新的存储模型,可以保存可排序的数据
  • sorted_set类型:在set的存储结构基础上添加可排序字段
sorted_set 类型数据的基本操作
  • 添加数据
zadd key score1 member1 [score2 member2]
  • 获取全部数据
zrange key start stop [WITHSCORES]
zrevrange key start stop [WITHSCORES]
  • 删除数据
zrem key member [member ...]
  • 按条件获取数据
zrangebyscore key min max [WITHSCORES] [LIMIT]  反向查询
zrevrangebyscore key max min [WITHSCORES]       正向查询
  • 条件删除数据
zremrangebyrank key start stop
zremrangebyscore key min max
  • 获取集合数据总量
zcard key
zcount key min max
  • 集合交、并操作
zinterstore destination numkeys key [key ...]
zunionstore destination numkeys key [key ...]
  • 获取数据对应的索引(排名)
zrank key member
zrevrank key member
  • score值获取与修改
zscore key member
zincrby key increment member
  • 获取当前系统时间
time

通用命令

key通用指令

key 特征

  • key是一个字符串,通过key获取redis中保存的数据

key应该设计哪些操作?

  • 对于key自身状态的相关操作,例如:删除,判定存在,获取类型等
  • 对于key有效性控制相关操作,例如:有效期设定,判定是否有效,有效状态的切换等
  • 对于key快速查询操作,例如:按指定策略查询key
key 基本操作
  • 删除指定key
del key
  • 获取key是否存在
exists key
  • 获取key的类型
type key

key通用操作

key 扩展操作(时效性控制)
  • 为指定key设置有效期
expire key seconds
pexpire key milliseconds
expireat key timestamp
pexpireat key milliseconds-timestamp
  • 获取key的有效时间
ttl key
pttl key
  • 切换key从时效性转换为永久性
persist key
key 扩展操作(查询模式)
  • 查询key
keys pattern

查询模式规则

* 匹配任意数量的任意符号 ? 配合一个任意符号 [] 匹配一个指定符号

keys * 查询所有
keys it* 查询所有以it开头
keys *heima 查询所有以heima结尾
keys ??heima 查询所有前面两个字符任意,后面以heima结尾
keys user:? 查询所有以user:开头,最后一个字符任意
keys u[st]er:1 查询所有以u开头,以er:1结尾,中间包含一个字母,s或t

key 其他操作

  • 为key改名
rename key newkey
renamenx key newkey   不可重复
  • 对所有key排序
sort
  • 其他key通用操作
help @generic

数据库通用指令

数据库

key 的重复问题
  • key是由程序员定义的
  • redis在使用过程中,伴随着操作数据量的增加,会出现大量的数据以及对应的key
  • 数据不区分种类、类别混杂在一起,极易出现重复或冲突
  • redis为每个服务提供有16个数据库,编号从0到15
  • 每个数据库之间的数据相互独立

解决方案

  • redis为每个服务提供有16个数据库,编号从0到15
  • 每个数据库之间的数据相互独立
db 基本操作
  • 切换数据库
select index
  • 其他操作
quit
ping
echo message
db 相关操作
  • 数据移动
move key db
  • 数据清除
dbsize    用于返回当前数据库的 key 的数量
flushdb   删除当前数据库
flushall  删除所有数据库