redis五种数据类型以及应用场景

Redis 是一个键值对数据库(key-value DB),数据库的值可以是字符串,散列表,列表,集合,有序集合,而数据库的键则总是字符串对象。

字符串类型

字符串是Redis中最基本的数据类型,它能够存储任何类型的字符串,包含二进制数据,并且是二进制安全的。所谓二进制安全就是输入任何字节都能正确处理, 即使包含零值字节(’\0’)。
如果有一种使用空字符来分割多个单词的特殊数据格式,如图所示,那么这种格式就不能使用C字符串来保存
在这里插入图片描述
对于上图,sds认为这个字符串是“hello world”,而C语言的字符处理函数就会把空格当作结束标志,认为这个字符串是“hello”。
正因为String类型是二进制安全的,所以才可以用于存储邮箱,JSON化的对象,甚至是一张图片,一个字符串允许存储的最大容量为512MB。字符串是其他四种类型的基础,与其他几种类型的区别从本质上来说只是组织字符串的方式不同而已。

命令

set key value : 设置 key 对应 string 类型的值, 返回 1 表示成功, 0 失败。(说明,设置key多次会覆盖)
setnx(not exist) key value: 如果 key 不存在进行设置,存在就不需要进行设置了,返回0
set key 时间 value: 设置值的同时设置过期时间
get key: 获取 key 对应的 string 值,如果 key 不存在返回 nil(在redis中nil代表为空)
getset key value : 先获取 key 的值,再设置 key 的值。
mget key1 key2 … keyN : 一次获取多个 key 的值
mset key1 value1 … : 一次设置多个 key 的值, 成功返回 1 表示所有的值都设置了,失败返回 0 表示没有任何值被设置。
msetnx key1 value1 … : 一次设置多个 key 的值,但是不会覆盖已经存在的 key
incr key: 递增,注意 incr 一个不是 int 的 value 会返回错误,incr 一个不在的 key,则设置 key 值为 1。
decr key : 递减, decr 一个不存在 key,则设置 key 值为-1。
incrby key integer: 对 key 加上指定值 , key 不存在设置 key,并认为原来的 value是 0。
decrby key integer: 对 key 减去指定值。decrby 完全是为了可读性,我们完全可以通过 incrby一个负值来实现同样效果,反之一样。
append[key]方法: 字符串追加方法
strien[key]方法: 获取字符串的长度
setrange key 10 value(10表示从第几位开始替换,后面跟上替换的字符串)

应用场景:
String是最常用的一种数据类型,普通的key/value存储都可以归为此类。

Hash类型

Hash类型是String类型的field和value的映射表,或者说一个String集合。它它特别适合存储对象相比较而言,将一个对象类型存储在Hash类型里要比存储在String类型里占用更少的内存空间并方便存取整个对象

命令

hset key field value: 设置 hash field 为指定值,如果 key 不存在,则创建
hget key field : 获取指定的 hash field。
hmget key filed1…fieldN : 获取全部指定的 hash filed。
hmset key filed1 value1 … filedN valueN : 同时设置 hash 的多个 field。
hincrby key field integer: 指定步长增加。成功返回 hash filed 变更后的值。
hexists key field : 检测指定 field 是否存在。
hdel key field: 删除指定的 hash field。
hlen key: 返回指定 hash 的 field 数量。
hkeys key: 返回 hash 的所有 field。
hvals key : 返回 hash 的所有 value。
hgetall : 返回 hash 的所有 filed 和 value

应用场景
用一个对象来存储用户信息,商品信息,订单信息等等。

list类型

list类型是一个链表结构的集合,其主要功能有push,pop,获取元素等。更详细的说,list类型是一个双端链表的结构,我们可以通过相关操纵进行集合的头部或尾部添加删除元素,list的设计简单精巧,既可以作为栈,又可以作为队列,满足绝大多数需求。

命令

lpush方法:从头部加入元素(栈)先进后出
lpush key string: 在 key 对应 list 的头部添加字符串元素,返回 1 表示成功, 0 表示 key 存在且不是 list 类型。
rpush方法:从尾部加入元素(队列)先进先出
rpush key string: 在 key 对应 list 的尾部添加字符串元素
len key: 返回 key 对应 list 的长度, 如果 key 不存在返回 0
lrange key start end: 返回指定区间内的元素, 下标从 0 开始, 负值表示从后面计算, -1 表示倒数第一个元素 , key 不存在返回空列表。
ltrim key start end : 截取 list 指定区间内元素,成功返回 1, key 不存在返回错误。
lset key index value: 设置 list 中指定下标的元素值,成功返回 1, key 或者下标不存在返回错误。
lrem key count value : 从 List 的头部(count 正数)或尾部(count 负数)删除一定数量(count)匹配 value 的元素,返回删除的元素数量。count 为 0 时候删除全部。
lpop key: 从 list 的头部删除并返回删除元素。
rpop key: 从 list 的尾部删除并返回删除元素
rpoplpush: 第一步从尾部删除元素,然后第二步并从头部加入元素
lindex: 返回名称为key的list中index位置的元素

应用场景
如好友列表,粉丝列表,消息队列,最新消息排行等。
rpush方法就相当于将消息放入到队列中,lpop/rpop就相当于从队列中拿去消息进行消费。

set集合

set集合是string类型的无序集合,不允许重复元素,set是通过hashtable实现的,对集合我们可以取交集,并集,差集。

命令

add key member: 添加一个 string 元素到 key 对应 set 集合中,成功返回 1,如果元素以及在集合中则返回 0, key 对应的 set 不存在则返回错误。
srem key member: 从 key 对应 set 中移除指定元素,成功返回 1,如果 member 在集合中不存在或者 key 不存在返回 0,如果 key 对应的不是 set 类型的值返回错误。
spop key : 删除并返回 key 对应 set 中随机的一个元素,如果 set 是空或者 key 不存在返回nil。
srandmember key: 随机取 set 中的一个元素,但是不删除元素。
smove srckey dstkey member: 从 srckey 对应 set 中移除 member 并添加到 dstkey 对应 set 中,整个操作是原子的。 成功返回 1,如果 member 在 srckey 中不存在返回 0, 如果 key 不是 set类型返回错误。相当于剪切复制
scard key: 返回 set 的元素个数,如果 set 是空或者 key 不存在返回 0。
sismember key member: 判断 member 是否在 set 中,存在返回 1, 0 表示不存在或者 key 不存在。
sinter key1 key2 …… keyN : 返回所有给定 key 的交集。
sinterstore dstkey key1 … keyN : 返回所有给定 key 的交集, 并保存交集存到 dstkey 下。
sunion key1 key2 … keyN: 返回所有给定 key 的并集。
sunionstore dstkey key1 … keyN: 返回所有给定 key 的并集, 并保存并集到 dstkey
sdiff key1 key2 … keyN: 返回所有给定 key 的差集。
sdiffstore dstkey key1 … keyN: 返回所有给定 key 的差集,并保存差集到 dstkey
smembers key: 返回 key 对应 set 的所有元素,结果是无序的

应用场景
共同好友、共同兴趣、分类标签

sorted set 类型

sorted set 是有序集合, 它在 set 的基础上增加了一个顺序属性,这一属性在添加修
改元素的时候可以指定, 每次指定后, 会自动重新按新的值调整顺序。 可以理解了有两列的
mysql 表,一列存 value,一列存顺序。操作中 key 理解为 sorted set 的名字

命令

zdd key score member: 添加元素到集合,元素在集合中存在则更新对应 score。
zrem key member: 删除指定元素, 1 表示成功,如果元素不存在返回 0。
zincrby key incr member : 增加对应 member 的 score 值, 然后移动元素并保持 skip list 保持有
序。返回更新后的 score 值。
zrank key member : 返回指定元素在集合中的排名(下标), 集合中元素是按 score 从小到大排序的。
zrevrank key member : 同上,但是集合中元素是按 score 从大到小排序。
zrange key start end : 类似 lrange 操作从集合中去指定区间的元素。返回的是有序结果
zrevrange key start end: 同上,返回结果是按 score 逆序的。
zrangebyscore key min max: 返回集合中 score 在给定区间的元素。
zcount key min max: 返回集合中 score 在给定区间的数量。
zcard key: 返回集合中元素个数。
zscore key element: 返回给定元素对应的 score

应用场景:
网站排行榜

通用命令

  1. keys * : 查询所有的键
  2. type key : 获取键对应的value的类型
  3. del key:删除指定的key value
  4. expire key second:设置key的过期时间
  5. ttl key:查看key的有效期5.Ttl key:查看key的有效期, ttl key值为-1,意思为持久保存,值为-2,意思是不存在/已经删掉了
  6. persist key:清除key的过期时间。Key持久化。

参考《redis中文入门手册》

你可能感兴趣的:(redis)