`
youyu4
  • 浏览: 442093 次
社区版块
存档分类
最新评论

Redis五种数据类型

 
阅读更多

Redis五种数据类型

 

String

 

常用命令:

 

set,get,decr,incr,mget 等。

 

应用场景:

 

String是最常用的一种数据类型,普通的key/value存储都可以归为此类,这里就不所做解释了。

 

实现方式:

 

String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。

 

 

Hash

 

常用命令:

 

hget,hset,hgetall 等。

 

应用场景:

 

我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户信息对象数据,包含以下信息:

用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息。

 

三种存储方式:

 

第一种

方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题。



 

第二种

方法是这个用户信息对象有多少成员就存成多少个key-value对儿,用用户ID+对应属性的名称作为唯一标识来取得对应属性的值,虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据,内存浪费还是非常可观的。



 方法三

Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口。

Key仍然是用户ID, value是一个Map,这个Map的key是成员的属性名,value是属性值,这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题。很好的解决了问题。



 

实现方式:

 

上面已经说到Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。

 

 

List

 

常用命令:

 

lpush,rpush,lpop,rpop,lrange等。

 

应用场景:

 

Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现,比较好理解,这里不再重复。

 

实现方式:

 

Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。

 

 

Set

 

常用命令:

 

sadd,spop,smembers,sunion 等。

 

应用场景:

 

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

 

实现方式:

 

set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

 

 

Sorted set

 

常用命令:

 

zadd,zrange,zrem,zcard等

 

使用场景:

 

Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。

 

实现方式:

 

Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。

 

  • 大小: 9.7 KB
  • 大小: 12.4 KB
  • 大小: 13.1 KB
分享到:
评论

相关推荐

    php 操作redis五大数据类型实例

    本资源主要是php 操作redis五大数据类型的实例,供参考 redis安装请移步 https://blog.csdn.net/xxs18326183038/article/details/80599080

    Java操作Redis的多种数据类型

    本文将深入探讨如何使用Java操作Redis的四种主要数据类型:字符串(String)、列表(List)、哈希(Hash)和集合(Set)。 首先,我们来看**字符串类型**(String)。在Redis中,字符串是最基础的数据类型,可以...

    Redis数据类型视频

    在本课程中,你将了解Redis是什么、能干什么、如何用,了解NoSQL的使用场景和概念,快速掌握Redis的安装配置、五大数据类型、常用操作命令、Redis持久化、主从复制、事务控制以及用Jedis操作进行Java开发等知识。...

    最全的Java操作Redis的工具类,利用StringRedisTemplate实现,封装了对Redis五种基本类型的各种操作!.zip

    最全的Java操作Redis的工具类,利用StringRedisTemplate实现,封装了对Redis五种基本类型的各种操作!Redis实用工具当前版本1.1 增加更全的方法,对之前的部分方法进行了规范命名,请放心替换成新版本。 Redis知识...

    数据结构Redis中数据类型对应的数据结构.pdf

    在Redis中,键的数据类型始终是字符串,而值的数据类型包括字符串、列表、字典、集合和有序集合。 1. 字符串(String):这是最基础的数据类型,对应数据结构是简单的字符串。在Redis中,字符串可以用来存储各种...

    Redis的基本数据类型,持久化

    Redis的基本数据类型,持久化

    Spring Boot整合Redis通过Zset数据类型+定时任务实现延迟队列教程对应源码

    延迟队列是一种非常实用的解决方案,而Redis也具备延迟队列的功能,这里博主将和大家分享基于Redis的Zset数据类型+定时任务实现延迟队列。 redis常见的实现延迟队列的方案 ❶ 通过过期key通知实现 ❷ 通过Zset数据...

    Redis思维导图数据类型的概念以及底层数据结构

    Redis思维导图数据类型的概念以及底层数据结构

    springboot整合redis的完整例子

    本文将详细讲解如何在Spring Boot项目中整合Redis,并介绍封装Redis五种数据类型工具类的方法。 首先,集成Spring Boot与Redis需要添加对应的依赖。在`pom.xml`文件中,我们需要引入`spring-boot-starter-data-...

    springboot集成Redis+测试类

    springboot集成Redis,以及测试类。包含了集成代码以及测试类代码。测试类中包含了redis五种数据类型的增删改查方法。

    RedisJSON-Redis 的 JSON 数据类型.zip

    RedisJSON 概述RedisJSON 是一个Redis模块,它将ECMA-404 JSON 数据交换标准实现为原生数据类型。它允许从 Redis 键(文档)存储、更新和获取 JSON 值。主要特征全面支持 JSON 标准用于选择文档内元素的JSONPath语法...

    Redis实战_Redis实战中文完整版_Redis快速入门_Redis数据类型及操作_Redis常用

    2. **Redis数据类型及操作**:这是Redis的核心部分,包括五大数据类型: - **字符串(String)**:最基础的数据类型,支持设置、获取、增加、减少等操作。 - **哈希(Hash)**:用于存储键值对集合,适用于存储对象。 ...

    Redis安装与操作

    Redis支持五种基本的数据类型,每种类型都有其独特的应用场景。 1. **String**:最简单的键值对存储方式,常用于缓存或计数等场景。 - 命令示例: - `GET key`:获取存储在键`key`中的字符串值。 - `SET key ...

    一个简单好用的redis缓存图形化管理工具,包含redis的5种数据类型的CRUD操作

    本文将深入探讨一个基于JeeSite框架构建的Redis缓存图形化管理工具,它支持Redis的五种基本数据类型的创建、读取、更新、删除(CRUD)操作,帮助开发者更直观地管理和维护Redis中的数据。 首先,我们来了解Redis的...

    Redis学习资料

    Redis学习手册 Hash数据类型 doc Redis学习手册 Key操作命令 doc Redis学习手册 List数据类型 doc Redis学习手册 Set数据类型 doc Redis学习手册 Sorted Sets数据类型 doc Redis学习手册 String数据类型 doc Redis...

    php 连接redis的相关数据类型和函数实例(超详细)

    Redis中的字符串是最基本的数据类型,你可以使用`set()`和`get()`来设置和获取值: ```php $redis->set('key', 'value'); $value = $redis->get('key'); ``` ### 列表(Lists) 列表是有序的元素集合,支持左推(`...

    c#操作Redis的5种基本类型汇总

    随着互联网技术的飞速发展,缓存技术成为了提升系统性能的重要手段之一。...通过掌握这五种基本类型,C#开发者能够充分利用Redis的高效数据处理能力,满足不同场景下的业务需求,提高应用程序的性能和响应速度。

    Redis笔记整理-五中数据类型之String和Hash

    Redis笔记整理-五中数据类型之String和Hash,这两种数据类型是我们常用语做缓存,从而减轻数据库的压力,缓存我们一般放到服务成,被多个表现成调用达到公用性

    Java 读取写Redis里的数据

    4. **Redis数据类型**: - Redis支持五种基本数据类型:String、Hash、List、Set和Sorted Set。每种类型都有特定的Java API来操作。 - - String:简单的键值对,如`set()`和`get()`。 - - Hash:存储键值对的集合...

Global site tag (gtag.js) - Google Analytics