Redis的数据类型


五种基本数据类型:

String字符串、Hash 哈希、List 列表、Set 集合、ZSet(Sort Set:有序集合)
在这里插入图片描述
底层数据结构一共有 6 种,分别是:简单动态字符串、双向链表、压缩列表、哈 希表、跳表和整数数组。其对应关系如下图所示:
在这里插入图片描述
全局哈希表:
在这里插入图片描述
    hash 可以在 O(1)的时间内计算出 hash 值并且找到对应的 entry 位置,entry 里面是一个一个 key 指针和 value 指针,其实还有其他信息。这也是 redis 之所以性能高的原因之一。

    但凡碰见 hash 表的,就一定会有一个冲突(碰撞)问题,并且冲突(碰撞)问题是不能避免的。

    可以通过链式哈希解决冲突,也就是同一个桶里面的元素使用链表保存。但是当 链表过长就会导致查找性能变差可能。所以 redis 为了追求块,使用了两个全局哈希表。用于 rehash 操作,增加现有的哈希桶数量,减少哈希冲突。
    开始默认使用【hash 表 1】保存键值对数据,【hash 表 2】此刻没有分配空间。 当数据越来越多的触发 rehash 操作,则执行以下操作:

给【hash 表 2】分配更大的空间
将【hash 表 1】的数据重新映射拷贝到【hash 表 2】中
释放【hash 表 1】的空间

    将 hash 表 1 的数据重新映射到 hash 表 2 的过程并不是一次性 的,这样会造成 redis 阻塞,无法提供服务。
    而是采用了渐进式 rehash,这样每次处理客户端请求的时候,先从【hash 表 1】 第一个索引开始,将这个位置的所有数据拷贝到【hash 表 2】中,就这样将 rehash 分散到多次请求过程中,避免耗时阻塞.

String(字符串)

    string 是 redis 最基本的类型,一个 key 对应一个 value。
    string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比 如 jpg 图片或者序列化的对象。string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

set key
value get key
del key

对象缓存(不对对象中数据操作时可以使用)

set user:1 value(json 格式数据)

计数器:

set news_views:1 0 设置文章访问量
incr news_views:1 文章访问量+1
decr news_views:1 文章访问量-1
get news_views:1 获得值

Web集群 session共享

session + redis 实现 session 共享

Hast(哈希)

     redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象(对对象中的数据发生修改情况)。
     其类型结果是 key(key:val) 类似于java中的对象名、对象的属性、对象属性的值

hset key field value 存储一个哈希表 key 的键值
hmset key field value [field value …] 存储多个键值对
hget key field 获取哈希表 key 对应的 field 键值
hmget key field [field …] 批量获取哈希表 key 中多个 field 键值
hdel key field [field …] 删除哈希表 key 中的 field 键值
hlen key 返回哈希表 key 中的 field 的数量
hgetall key 返回哈希表 key 中所有的键值
hincrby key field 增加的值(减少给负数)

以电商购物车为例

添加商品→hset cart:1001 10088 1
增加数量→hincrby cart:1001 10088 1
商品总数→hlen cart:1001
删除商品→hdel cart:1001 10088
获取购物车所有商品→hgetall cart:1001

List(列表)

列表是简单的数据结构类型,按照插入的顺序排序,可以添加元素到list的头部,也可以添加元素到list的尾部

lpush key value[value…] 将一个或多个值插入到 key 列表的表头(最左边)
rpush key value[value…] 将一个或多个值插入到 key 列表的表尾(最右边)
lpop key 移除并返回 key 列表的头元素 rpop key 移除并返回 key 列表的尾元素
lrange key start stop 返回列表key中指定区间内的元素,区间以偏移量start 和 stop

使用场景:可以用来存储接收到的消息数据.

Set(集合)

Redis的Set是无序的集合,

sadd key member[member…] 往集合 key 中存入元素
srem key member[member…] 从集合 key 中删除元素
smembers key 获取集合 key 中所有元素
scard key 获取集合 key 的元素个数

Zset(sort set:有序集合)

redis zset 也是不允许重复的成员,但是是有序的。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。zset 的成员是唯一的,但分数(score)却可以重复。

zadd key score member[[score member]…] 往有序集合 key 中加入带分值元素
zrem key member[member…] 从有序集合 key 中删除元素
zscore key member 返回有序集合 key 中元素 member 的分值
zincrby key increment member 为有序集合 key 中元素 member 的分值加上 increment
zcard key 返回有序集合 key 中元素个数
zrange key start stop[withscores] 正序获取有序集合 keyastart 下标到 stop 下标的元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值