什么是redis服务+redis服务数据类型有哪些??

ops/2024/10/21 5:53:10/

一、背景:

在运维工作会一定会接触到数据库服务,例如oracle数据库、mysql数据库redis数据库等,这里要介绍的就是redis数据库

二、什么是redis??

Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的,使用 C语言开发编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value(键值对)数据库,并提供多种语言的API。

Redis(Remote Dictionary Server)在 2009 年发布,开发者 Salvatore Sanfilippo
是意大利开发者。

三、redis与mysql的区别??

问:redis和mysql都是数据库,他们的区别是什么?

答:redis与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。

redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。

四、Redis 对比 Memcached:

memcached服务和redis服务都属于内存缓存服务,而且memcached服务要早于redis服务的。

  1. Memcached 不支持数据持久化,而 Redis 支持数据的持久化:可以将内存中的数据保持在磁盘中,重启 redis 服务或者服务器之后可以从备份文件中恢复数据到内存继续使用。
  2. Redis 支持更多的数据类型:支持 string(字符串)、hash(哈希数据)、list(列表)、set(集合)、zet(有序集合)
  3. Redis 支持数据的备份:可以实现类似于数据的 master-slave 模式的数据备份,另外也支持使用快照(RDB)+AOF。
  4. Redis 支持更大的 value 数据:memcache 单个 key value 最大只支持 1MB,而 redis 最大支持 512MB。
  5. Redis 是单线程,而 memcache 是多线程,所以单机情况下没有 memcache 并发高,但 redis 支持分布式集群以实现
  6. Redis 支持更高的并发,单 Redis 实例可以实现数万并发。
  7. Redis 支持集群横向扩展:基于 redis cluster 的横向扩展,可以实现分布式集群,大幅提升性能和数据安全性。Redis 和 memcached 都是基于 C 语言开发。

五、Redis服务的数据结构类型:

Redis有以下这五种基本类型:

String(字符串)
Hash(哈希)
List(列表)
Set(集合)
zset(有序集合)

三种特殊的数据结构类型:
Geospatial
Hyperloglog
Bitmap

redis的基础五种数据类型: 

1、string【字符串】:

 String是Redis最基础的数据结构类型,它是二进制的,可以存储图片或者序列化的对象,值最大存储为512M
简单使用举例: set key value、get key等
应用场景:共享session、分布式锁,计数器、限流。
内部编码有3种,int(8字节长整型)、embstr(小于等于39字节字符串)、raw(大于39个字节字符串)
C语言的字符串是char[]实现的,而Redis使用SDS(simple dynamic string) 封装,sds源码如下:

struct sdshdr { unsigned int len; // 标记buf的长度 unsigned int free; //标记buf中未使用的元素个数 char buf[]; // 存放元素的坑 
}

SDS结构组成如下: 

问:Redis为什么选择SDS结构的原因,而C语言原生的char[]不香吗?

答:举例其中一点,SDS中,O(1)时间复杂度,就可以获取字符串长度;而C 语言中的字符串,需要遍历整个字符串,时间复杂度为O(n)。

2、Hash(哈希):

在Redis中,哈希类型是指v(值)本身又是一个键值对(k-v)结构
简单使用举例:hset key field value 、hget key field
内部编码:ziplist(压缩列表) 、hashtable(哈希表)
应用场景:缓存用户信息等。
注意点:
如果开发使用hgetall,哈希元素比较多的话,可能导致Redis阻塞,可以使用hscan。
如果只是获取部分field,建议使用hmget。

字符串和哈希数据类型对比如下图:

3、List(列表):

列表(list)类型是用来存储多个有序的字符串,一个列表最多可以存储2^32-1个元素。
简单实用举例:lpush key value [value ...] 、lrange key start end
内部编码:ziplist(压缩列表)、linkedlist(链表)
应用场景:消息队列,文章列表,

list类型的插入与弹出如图:

list应用场景参考以下:
lpush+lpop=Stack(栈)
lpush+rpop=Queue(队列)
lpsh+ltrim=Capped Collection(有限集合)
lpush+brpop=Message Queue(消息队列)

4、Set(集合):

集合(set)类型也是用来保存多个的字符串元素,但是不允许重复元素
简单使用举例:sadd key element [element ...]、smembers key
内部编码:intset(整数集合)、hashtable(哈希表)
注意点:smembers和lrange、hgetall都属于比较重的命令,如果元素过多存在阻塞Redis的可能性,可以使用sscan来完成。
应用场景:用户标签,生成随机数抽奖、社交需求。

set数据类型结构图:

5、有序集合(zset):

已排序的字符串集合,同时元素不能重复
简单格式举例:zadd key score member [score member ...],zrank key member
底层内部编码:ziplist(压缩列表)、skiplist(跳跃表)
应用场景:排行榜,社交需求(如用户点赞)。

(1)、ziplist:

满足以下两个条件:

[value,score]键值对数量少于128个;每个元素的长度小于64字节。

(2)、skiplist:

条件一:[value,score]键值对数量少于128个;

条件二:每个元素的长度小于64字节。

不满足以上两个条件时使用skiplist跳表,组合了hash和skiplist

hash用来存储value到score的映射,在时间复杂度o(1)时间内知道对应value的分数。

skiplist按照从小到大的顺序存储分数;每个元素存储的都是<value,score>对。

6、Redis 的三种特殊数据类型:

Geospatial:

Redis3.2推出的,地理位置定位,用于存储地理位置信息,并对存储的信息进行操作。

HyperLogLog:

用来做基数统计算法的数据结构,如统计网站的UV。

注:uv(unique visitor,独立访客)

  • 1天内访问某站点的人数(以cookie为依据);
  • 1天内同一访客的多次访问只计为1个访客。

Bitmaps :

用一个比特位来映射某个元素的状态,在Redis中,它的底层是基于字符串类型实现的,可以把bitmaps成作一个以比特位为单位的数组。

 

 


http://www.ppmy.cn/ops/14640.html

相关文章

第十五届蓝桥杯省赛第二场C/C++B组A题【进制】题解(AC)

解题思路 按照题意进行模拟&#xff0c;计算 x x x 的 b b b 进制过程中&#xff0c;若出现余数大于 9 9 9&#xff0c;则说明 x x x 的 b b b 进制一定要用字母进行表示。 #include <iostream> #include <cstring> #include <algorithm> #include &l…

【linux】Linux第一个小程序-进度条

1. 预备知识&#xff1a;回车和换行 回车&#xff08;Carriage Return&#xff0c;CR&#xff09;&#xff1a; 在早期的机械打字机中&#xff0c;回车指的是将打字机的打印头移回到行首的操作&#xff0c;这样打印头就可以开始新的一行的打印。在ASCII编码中&#xff0c;回车用…

12.7.1 实验7:实施路由器密码恢复

1、实验目的 通过本实验可以掌握&#xff1b; 路由器密码恢复原理。路由器密码恢复步骤。修改配置寄存器值的方法。 2、实验步骤 路由器密码恢复的过程如下所述。 &#xff08;1&#xff09;路由器冷启动。 1分钟内按【CtrlBreak】键进入ROM监控(ROM Monitor ) rommon模式…

【Unity】苹果(IOS)开发证书保姆级申请教程

前言 我们在使用xcode出包的时候&#xff0c;需要用到iOS证书(.p12)和描述文件(.mobileprovision) 开发证书及对应的描述文件用于开发阶段使用&#xff0c;可以直接将 App 安装到手机上&#xff0c;一个描述文件最多绑定100台测试设备 1.证书管理 进入网站Apple Developer &…

centos7搭建git服务器

1.centos7安装git yum install -y git yum install -y git-daemon 2.初始化空目录仓库 mkdir /usr/local/git mkdir /usr/local/git/projects mkdir /usr/local/git/projects/test-projects.git cd test-projects.git git --bare init 3.修改目录权限 cd .. chmod 775 tes…

uniapp 小程序 多张图片生成海报以及下载海报

uniapp 小程序 多张图片生成海报以及下载海报 上代码 export default {data() {return {unit: 0,imgurl:"", // 海报图片shareimg:"https://eshopfile.zhiyousx.com/2022051811164947691.jpg", //背景图qrcode :"", // 二维码saveTop:80,}},on…

基于Hadoop的电商用户行为分析系统设计与实现的系统架构设计

采集层&#xff1a;利用Flume采集电商服务器端用户行为数据&#xff0c;把数据处理后发送至HDFS。 存储层&#xff1a;用户行为数据采集上传至HDFS存储&#xff0c; 导入到数据仓库Hive进行计算处理&#xff0c;分析结果保存至MySql数据库中。 计算层&#xff1a;根据分析需求建…

随机森林计算指标重要性—从决策树到随机森林Python实现

文章目录 前言一、节点二、决策树2.1 案例分析——优良的水稻2.2 案例分析——家庭财富水平 三、随机森林三、Python代码实现3.1 关键问题3.1.1 节点的表示3.1.2 决策树的表示** 根节点划分左右子树的依据 **3.1.3 随机森林的构造与重要性的表示 3.2 节点类3.2 决策树类3.2.1 初…