redis 支持的数据类型详解以及用途
redis 支持多种数据类型,常见的有 String ,List Set , Sorted set ,Hash等。下面就以上几种类型的特点和用途进行说明 。
String 类型.
string 类型是二进制安全存储的,通常用以保存 图片,css文件等静态文件。
string类型的内存结构:
struct sdshdr{
long len;
long free;
char buf[];
};
buf数组:字符串的尸体,保存字符串的内容 len:记录buf的长度,free:记录buf还有多少空间可用。
string类型redis中常用的命令:
set key value 设置key 和value
get key 获取key的值
mset key1 value1 key2 value2 设置多个key 和value
mget key1 key2 获取多个key 的值
incr key 对key对应的值自增1
decr key 对key对应的值自减1
用途除了储存静态文件外,根据incr 的自增特性,可以做统计用。如:统计网站的访问次数。
List 类型:
list 数据类型是指 key对应的 value 是一个双向链表结构,所以list类型支持所有链表的操作。
常用的命令:
lpush key string 给list头部添加一元素
rpush key string 给list尾部添加一个元素
lpop key 返回获取头部的元素 并移除这个元素
rpop key 返回获取尾部的元素 并移除这个元素
List 的用途:
大致常用的有,如:微博的“我关注的列表””就可以用list去存储,userName为key 关注的东西为value,当然,论坛中的回帖也是可以这样处理的。这样的用法是比较常见的。
list也可以做消息队列,从而减轻数据库压力,充分用到了 rpush 和lpop 。尾部插入,头部获取并移除。构建消息队列。
Set类型:
set数据类型是一种无序的集合,正好和list形成了鲜明的对比。在redis内部,Set是通过HashTable实现的。所以查找元素的时间复杂度是O(1). Set 的优势在于,快速的查找元素是否存在,用于记录一些不能重复的数据。
Set 常用命令:
sadd key value 添加一个string元素到key对应的set集合
sismember key value 判断value 是否存在key对应的set集合内,存在返回1 不存在返回0
smembers key 返回key对应的set集合的所有元素,结果是无序的。
Set的用途:
set类型通常是用于记录做过某些事情,或者判断是否存在。如: 可以将注册的用户名放到set中,在注册是就可以通过redis set 快速的判断用户名是否存在了。再如: 投票统计,假如每天每个用户只能参加一次某个活动的投票,那么我们就可以通过set 的命令 sismember 判断是否投过票,当然通过得到的结果集合,就可以看到用户的投票情况 set smembers。
Sorted Set 类型
sorted set类型和set类型很相似。都是strng类型元素的集合。不同的是 sorted set 属于有序集合。
sorted set 通过一个double类型的证书 score 进行排序的。 sorted set中,通过SkipList(跳跃表) 和 HashTable组合完成的。SkipList负责排序,HashTable负责保存数据。保证了时间复杂度的 O(1)
Sorted Set常用的命令
zadd key score value 添加元素value 到集合,元素在集合中存在的则更新对应的score
zincrby key incr value 增加对应value元素的score值
zrange key start end 从集合中指定 start end 返回score 的顺序排序列表
zrevrange key star end 从集合中指定 start end 返回score 的逆序排序列表。
zcard key 返回集合中元素的个数
Sorted Set 用途:
Sorted set 可以做set 能做的,也可以做set 不能做的,比如说: 构建一个具有优先级的消息队列。
再比如: 排行榜应用中,按“顶帖“次数排序, 可以将排序的值设置成sorted set中的 score 。将具体的数据设置成相应的value 。 用户每次点击”顶贴“按钮时。只需要zadd命令修改score的值。
Hash类型。
hash类型时一个key 对应一个hashTable 。添加,查找,修改,删除操作的时间复杂度都是O(1).
hash 类型适合应用于存储对象,新建一个hash对象的时候,为了节省内存,redis 使用zipmap 进行存储数据,这个zipmap并不是真正的hashtable ,添加,删除等操作的时间复杂度都是O(n),但是相比于一般的hashtable ,zipmap节省了不少内存。
hash 类型常用的命令:
hset key field value 设置key对应的hashtable 中对象field 的值
hget key field 获取 key对应的hashtable 中 field的关联的值
hexists key field 判断field域 是否存在
hgetall key 获取key对应的整个hashtable 的所有域和关联的值
Hash类型的用途:
比如:存储用户信息对象,用户id 作为key field 域 都有 name age sex 等名称,每个field对应的value --name的数据,age的数据,sex数据;
如果field 或者value的大小超过一定的限制,那么redis在内部自动将zipmap转化为正常的hashTable ,配置文件中,hash-max-zipmap-entries 和 hash-max-zipmap-value 这两个设置 对应的限制。
相关推荐
数据类型详解 以及 redis适用场景场合 数据类型详解 以及 redis适用场景场合
redis 数据类型详解 以及 redis适用场景场合 - 血泪汗KG
本文主要讲述:Redis所支持的数据类型、key、string、list、set、hash的相关命令,以及它的持久化、主从复制和事务。
3.Redis数据类型之List类型
数据结构 数据结构Redis中数据类型对应的数据结构 中数据类型对应的数据结构 Redis Redis 是⼀种键值(Key-Value)数据库。相对于关系型数据库(⽐如 MySQL),Redis 也被叫作⾮关系型数据库。 像 MySQL 这样的关系...
主要介绍了Redis数据导入导出以及数据迁移的4种方法详解,需要的朋友可以参考下
使用Java操作Redis的字符串类型、list链表类型、hash哈希表类型、set无序集合类型的数据,简单易懂。
用途:帮助读者了解stream数据类型的定义、使用场景、主要命令,掌握XADD、XLEN、XRANGE、XREADGROUP、XPENDING、XGROUP、XINFO、XACK、XCLAIM和XTRIM等命令的使用方法,从而在实际开发中运用stream数据类型,提高...
在本课程中,你将了解Redis是什么、能干什么、如何用,了解NoSQL的使用场景和概念,快速掌握Redis的安装配置、五大数据类型、常用操作命令、Redis持久化、主从复制、事务控制以及用Jedis操作进行Java开发等知识。...
Java实现redis,linux安装redis,一分钟学会使用redis,就是这么简单
07-Redis队列Stream、Redis多线程详解_ev.07-Redis队列Stream、Redis多线程详解_ev.07-Redis队列Stream、Redis多线程详解_ev.07-Redis队列Stream、Redis多线程详解_ev.07-Redis队列Stream、Redis多线程详解_ev.07-...
主要介绍了SpringBoot2整合Redis多数据源步骤详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Redis 数据类型的详解 概要: Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 String(字符串) string是redis最基本的类型,你可以理解成与...
基于redis分页和排序设计(根据redis的数据类型设计)
主要介绍redis五种数据类型在Java中的详细使用 , 注释特别详细, 里面有我邮箱, 不懂的地方随时问我. 非常值得学习. 更多redis资料, 请与我邮箱联系!
SpringDataRedis对Redis的数据类型的常用操作API的使用代码举例
Redis中stream数据类型的命令详解
redis快速入门详解,包括主从备份、详细配置说明~
1、新旧redis集群迁移 2、支持redis集群的存量和增量数据迁移 3、支持redis集群数据的离线迁移
介绍redis的五种数据类型的使用场景,更便于学习redis的操作,了解使用!