【入门篇】1.1 redis 基础数据类型详解和示例

文章目录

  • 1. 简介
  • 2. Redis基础数据类型
    • 2.1 String类型
      • 场景示例
      • 常用命令示例
    • 2.2 List类型
      • 场景示例
    • 2.3 Set类型
      • 场景示例
    • 2.4 Hash类型
      • 场景示例
    • 2.5 Sorted Set类型
  • 3. 使用Redis存储数据的注意事项
    • 1. 内存管理
    • 2. 数据持久化
    • 3. 高并发下的性能考量
  • 4. 参考资料

在这里插入图片描述

1. 简介

Redis概述

Redis 是一个开源的在内存中存储数据的结构化键值数据库,它支持多种类型的数据结构,如字符串、列表、集合、哈希、有序集合等。此外,Redis还支持事务、持久化、LUA脚本、LRU清除、自动故障转移等功能。

Redis特点

  • 性能高效:Redis能读的速度是110000次/s,写的速度是81000次/s,因此被广泛应用于缓存场景。

  • 支持多种数据类型:Redis支持最常见的数据类型,为复杂的应用提供了广泛的可能性。

  • 数据持久化:Redis可以将数据保存在磁盘上,重启后可以再次加载进行使用。

  • 支持消息队列:Redis还可以用作消息队列使用,它提供了发布/订阅等相关功能。

  • 支持事务:Redis支持事务,可以一次执行多个命令,中间不会被其他命令插入。

  • 高可用和分布式:通过Redis的Sentinel系统和Cluster集群模式,可以构建高可用、分布式的Redis系统。

Redis安装和启动

Redis的安装过程根据操作系统的不同而不同。以Linux为例,可以通过如下命令进行安装:

$ wget http://download.redis.io/releases/redis-5.0.3.tar.gz
$ tar xzf redis-5.0.3.tar.gz
$ cd redis-5.0.3
$ make

安装完成后,可以通过以下命令启动Redis:

$ src/redis-server

这样就成功启动了Redis服务器。要连接到这个服务器,可以打开另一个终端窗口,然后输入:

$ src/redis-cli

这样就可以开始使用Redis了。

2. Redis基础数据类型

2.1 String类型

String类型是Redis最基础的数据类型,是二进制安全的。它可以包含任何数据,例如jpeg图片或者序列化的对象,或者就简单的文本数据。String类型的value最大能存储512MB的数据。

场景示例

在一个电商平台中,用户的购物车信息可以使用String类型存储,例如存储用户ID和购物车商品数量的键值对。

SET user:1:cart 5
GET user:1:cart

常用命令示例

1. SET:

SET命令用于设置指定键的值,如果键已经存在则覆盖旧的值。

SET name "John Doe"

执行结果:OK。命令执行成功,则返回OK

2. GET:

GET命令用于获取指定键的值。

GET name

执行结果:"John Doe"。如果键存在则返回其对应的值,否则返回nil

3. INCR:

INCR命令用于将指定键的值增加1。如果键不存在,那么在操作前会先将其设置为0,然后再执行加1操作。

SET counter 100
INCR counter

执行结果:101INCR命令返回执行操作后的值。

4. DECR:

DECR命令用于将指定键的值减少1。同样,如果键不存在,那么在操作前会先将其设置为0,然后再执行减1操作。

DECR counter

执行结果:100DECR命令返回执行操作后的值。

2.2 List类型

List类型是Redis的一种复杂的数据类型,也是Redis的重要特性之一。Redis的List类型实际上是一个双向链表,所以添加一个新的元素到List的头部或者尾部的复杂度是O(1)。同时由于采用链表实现,你可以利用索引下标来获取元素,或者进行范围查询,这个操作的复杂度是O(N)。

场景示例

在一个即时通讯应用中,可以使用List类型存储聊天记录,每次发送的消息都会添加到List中。
命令示例:

LPUSH chat:room1 "Hello"
LPUSH chat:room1 "How are you?"
LRANGE chat:room1 0 -1

常用命令示例及执行结果

1. LPUSH:

LPUSH命令用于将一个或多个值插入到列表头部:

LPUSH mylist "World"
LPUSH mylist "Hello"

执行结果:2LPUSH命令返回此时列表的长度。

执行LRANGE mylist 0 -1命令查看列表,结果为:1) "Hello" 2) "World"

2. RPUSH:

RPUSH命令用于将一个或多个值插入到列表的尾部:

RPUSH mylist "Redis"

执行结果:3RPUSH命令返回此时列表的长度。

执行LRANGE mylist 0 -1命令查看列表,结果为:1) "Hello" 2) "World" 3) "Redis"

3. LPOP:

LPOP命令用于移除并返回列表的第一个元素:

LPOP mylist

执行结果:"Hello"LPOP命令返回被移除的元素的值。

执行LRANGE mylist 0 -1命令查看列表,结果为:1) "World" 2) "Redis"

4. RPOP:

RPOP命令用于移除并返回列表的最后一个元素:

RPOP mylist

执行结果:"Redis"RPOP命令返回被移除的元素的值。

执行LRANGE mylist 0 -1命令查看列表,结果为:1) "World"

以上即为Redis List类型的常用命令示例,以及它们的执行结果。对于更多的命令,你可以查阅Redis的官方文档进行学习。

2.3 Set类型

Set类型也是Redis的一种复杂数据类型,它是一种无序的、元素不重复的集合。由于集合中的元素是唯一的,所以可以使用Set类型来存储一些集合元素,并进行交集、并集、差集等操作。

场景示例

某个社交网络应用中,可以使用Set类型存储用户的好友列表,以便进行好友关系的管理。
命令示例:

SADD user:1:friends user:2
SADD user:1:friends user:3
SMEMBERS user:1:friends

常用命令示例

1. SADD:

SADD命令用于向集合添加一个或多个成员。

SADD myset "Hello"
SADD myset "World"

执行结果:1SADD命令返回添加成功的元素数量。

执行SMEMBERS myset命令查看集合,结果为:1) "Hello" 2) "World"

2. SREM:

SREM命令用于移除集合中一个或多个成员。

SREM myset "World"

执行结果:1SREM命令返回移除成功的元素数量。

执行SMEMBERS myset命令查看集合,结果为:1) "Hello"

3. SISMEMBER:

SISMEMBER命令用于判断成员元素是否是集合的成员。

SISMEMBER myset "World"
SISMEMBER myset "Hello"

执行结果:01SISMEMBER命令返回元素是否在集合中,0表示不在,1表示在。

2.4 Hash类型

Hash类型是Redis的一种复杂数据类型,它相当于一种简单的二级字典:第一级的key对应一个新的字典,这个新的字典就是Hash的内部结构,拥有自己的key-value对。Hash类型适合用于存储对象。

场景示例

某个网站需要存储用户的个人信息,可以使用Hash类型存储用户的姓名、年龄、性别等字段。
命令示例:

HSET user:1 name "John"
HSET user:1 age 25
HSET user:1 gender "Male"
HGETALL user:1

常用命令示例

1. HSET:

HSET命令用于为哈希表中的字段赋值。

HSET myhash field1 "Hello"
HSET myhash field2 "World"

执行结果:1HSET命令返回操作成功的数量。

执行HGETALL myhash命令查看哈希表,结果为:1) "field1" 2) "Hello" 3) "field2" 4) "World"

2. HGET:

HGET命令用于获取存储在哈希表中指定字段的值。

HGET myhash field1

执行结果:"Hello"HGET命令返回字段的值。

3. HGETALL:

HGETALL命令用于获取在哈希表中指定key的所有字段和值。

HGETALL myhash

执行结果:1) "field1" 2) "Hello" 3) "field2" 4) "World"HGETALL命令返回哈希表的所有字段和值。

2.5 Sorted Set类型

Sorted Set是Redis的一种复杂数据类型,也是集合的一种,能够存储一组数据,并且每个数据都有一个得分。数据是唯一的,但是得分(score)可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。而得分的值是通过跳跃表来进行排序的。

场景示例:一个新闻网站可以使用Sorted Set类型存储热门新闻的排名,以便展示热门文章。
命令示例:

ZADD news:popular 1000 "Article1"
ZADD news:popular 800 "Article2"
ZADD news:popular 600 "Article3"
ZREVRANGE news:popular 0 -1 WITHSCORES

常用命令示例

1. ZADD:

ZADD命令用于向有序集合添加一个或多个成员,或者更新已存在成员的分数。

ZADD myzset 1 "one"
ZADD myzset 2 "two" 3 "three"

执行结果:1ZADD命令返回被成功添加的新成员的数量。

执行ZRANGE myzset 0 -1 WITHSCORES命令查看有序集合,结果为:1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3"

2. ZSCORE:

ZSCORE命令返回有序集中,成员的分数值。

ZSCORE myzset "one"

执行结果:"1"ZSCORE命令返回成员的分数值。

3. ZRANGE:

ZRANGE命令用于返回有序集中,指定区间内的成员。

ZRANGE myzset 0 -1

执行结果:1) "one" 2) "two" 3) "three"ZRANGE命令返回指定区间内的成员。

3. 使用Redis存储数据的注意事项

1. 内存管理

  • Redis是基于内存的数据库,数据存储在内存中,因此需要注意合理使用内存。可以使用maxmemory参数限制Redis使用的最大内存大小,并使用相应的策略(如LRU)来处理内存不足的情况。
  • 对于大量数据存储的情况,可以考虑使用分片(sharding)或者集群(cluster)来扩展Redis的内存容量。

2. 数据持久化

  • Redis提供了两种持久化机制:RDB(Redis Database)和AOF(Append-Only File)。
  • RDB是将Redis在某个时间点的数据以快照的形式保存到硬盘上,适合用于备份和恢复数据。
  • AOF是将Redis的操作日志以追加的方式保存到硬盘上,适合用于持久化数据,但会增加IO的开销。
  • 可以根据实际需求选择合适的持久化机制,并配置相应的策略(如定时保存或根据操作数保存)来保证数据的安全性。

3. 高并发下的性能考量

  • Redis是单线程的,虽然性能非常高,但在高并发的情况下需要注意一些性能优化的问题。
  • 使用pipeline可以将多个命令打包发送,减少网络开销。
  • 使用批量操作命令(如MSET、MGET等)可以减少单个命令的调用次数,提高效率。
  • 合理使用连接池,避免频繁地建立和关闭连接。
  • 对于复杂的操作,可以考虑使用Lua脚本来减少网络通信开销。
  • 避免使用过多的阻塞操作,如BRPOP、BLPOP等,以免影响其他客户端的响应时间。

4. 参考资料

https://github.com/redis/redis

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/188307.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web环境实现一键式安装启动

部署的痛点 一般在客户环境安装web环境,少说需要花费1-2小时。一般需要安装jdk、nginx、mysql、redis等 等你接触到了inno setup ,你有可能会节约更少的时间去部署。也有可能是一个不懂技术的人,都可以进行操作的。废话不多说,接…

Unity Text文本首行缩进两个字符的方法

Text文本首行缩进两个字符的方法比较简单。通过代码把"\u3000\u3000"加到文本字符串前面即可。 参考如下代码: TMPtext1.text "\u3000\u3000" "这是一段有首行缩进的文本内容。\n这是第二行"; 运行效果如下图所示: 虽…

人工智能引领环境保护的新浪潮:技术应用及其影响

在全球范围内,环境保护已经成为一个迫切的话题。随着人工智能技术的发展,它开始在环境保护领域扮演越来越重要的角色。AI不仅能够帮助更有效地监测环境变化,还能提出解决方案来应对环境问题。 污染监测与控制: AI系统可以分析来自…

基于STC12C5A60S2系列1T 8051单片机的模数芯片ADC0832实现模数转换应用

基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0832实现模数转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍模数芯片ADC0832介绍通过模数芯片ADC0832把电压模…

飞书开发学习笔记(八)-开发飞书小程序Demo

飞书开发学习笔记(八)-开发飞书小程序Demo 一.小程序开发概述 1.1 小程序开发概述 飞书开发文档中查看:小程序开发概述 飞书小程序是指可以运行在飞书客户端中的小程序,小程序的一套代码可以适配 Android、iOS、PC 多平台,且用户体验与飞书…

linux 查看命令使用说明

查看命令的使用说明的命令有三种,但并不是每个命令都可以使用这三种命令去查看某个命令的使用说明,如果一种不行就使用另外一种试一试。 1.whatis 命令 概括命令的作用 2.命令 --help 命令的使用格式和选项的作用 3.man 命令 命令的作用和选项的详细…

034、test

之——全纪录 目录 之——全纪录 杂谈 正文 1.下载处理数据 2.数据集概览 3.构建自定义dataset 4.初始化网络 5.训练 杂谈 综合方法试一下。 leaves 1.下载处理数据 从官网下载数据集:Classify Leaves | Kaggle 解压后有一个图片集,一个提交示…

C语言指针详解(1)(能看懂字就能明白系列)文章超长,慢慢品尝

目录 1、内存和地址 2、指针简介 与指针相关的运算符: 取地址操作符(&) 解引用操作符(间接操作符)(*) ​编辑 指针变量的声明 指针变量类型的意义 指针的基本操作 1、指针与整数相加…

GMS CTS测试命令汇总

目录 跑CTS之前的准备 样机环境要求 跑各模块版本要求 CTS 简介 复测上轮的失败项 多台设备测试 单跑指定模块和测试用例 GTS VTS STS GSI 获取fingerprint 跑CTS之前的准备 样机环境要求 1、打开stay wake(保持屏幕常亮)、OEM unlocking、…

转载:YOLOv8改进全新Inner-IoU损失函数:扩展到其他SIoU、CIoU等主流损失函数,带辅助边界框的损失

0、摘要 随着检测器的快速发展,边界框回归(BBR)损失函数不断进行更新和优化。然而,现有的 IoU 基于 BBR 仍然集中在通过添加新损失项来加速收敛,忽略了 IoU 损失项本身的局限性。尽管从理论上讲,IoU 损失可…

一阶低通滤波器(一阶巴特沃斯滤波器)

连续传递函数G(s) 离散传递函数G(z) 转换为差分方程形式 一阶巴特沃斯滤波器Filter Designer参数设计:参考之前的博客Matlab的Filter Designer工具设计二阶低通滤波器 设计采样频率100Hz,截止频率20Hz。 注意:设计参数使用在离散系统中&…

Linux:常见指令

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》 文章目录 前言一、常见指令ls指令pwd指令cd指令touch指令mkdir指令rmdir指令rm指令man指令cp指令mv指令cat指令tac指令echo指令more指令less指令head指令tail指令date显示Cal指令find指令gr…