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

news2025/1/11 2:30:58

文章目录

  • 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.coloradmin.cn/o/1220913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springMvc中的拦截器【巩固】

先实现下想要的拦截器功能 package com.hmdp.utils;import com.hmdp.entity.User; import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Ht…

【SpringMvc】SpringMvc +MyBatis整理

🎄欢迎来到边境矢梦的csdn博文🎄 🎄本文主要梳理 Java 框架 中 SpringMVC的知识点和值得注意的地方 🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关…

python_主动调用其他类的成员

# 主动调用其他类的成员 # 方式一: class Base(object):def f1(self):print("5个功能") class Foo(object):def f1(self):print("3个功能")# Base.实例方法(自己传self),与继承无关Base.f1(self)obj Foo() obj.f1()print("#"*20)# 方式二:按照类…

Rockdb简介

背景 最近在使用flink的过程中,由于要存储的状态很大,所以使用到了rockdb作为flink的后端存储,本文就来简单看下rockdb的架构设计 Rockdb设计 Rockdb采用了LSM的结构,它和hbase很像,不过严格的说,基于LS…

希亦ACE和小吉内衣洗衣机选哪个?两款洗衣机对比

内衣洗衣机可以称得上是实现幸福的小家电,它不仅懒人的福音还是我们打工人的福音,在每天下班之后可以有时间休息了,洗完澡还有要手洗内衣裤,真的很痛苦,拥有了内衣洗衣机简直是一件非常幸福的事情,但现在市…

wpf devexpress Property Grid创建属性定义

WPF Property Grid控件使用属性定义定义如何做和显示 本教程示范如何绑定WP Property Grid控件到数据和创建属性定义。 执行如下步骤 第一步-创建属性定义 添加PropertyGridControl组件到项目。 打开工具箱在vs,定位到DX.23.1: Data 面板,选择Prope…

HarmonyOS 实现底部导航栏

该功能实现需要Tabs、TabsController、TabContent、Column等组件 Tabs相当于Android中的BottomNavigationView TabContent相当于Android中的fragment TabBuilder内相当于每个Item Entry Component struct Main {public tabsController : object new TabsController()State c…

后端接口性能优化分析-多线程优化

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码🔥如果感觉博主的文章还不错的话,请👍三连支持&…

微软 Gradle 强强联手,Gradle 构建服务器正式开源!

作者:Nick Zhu - Senior Program Manager, Developer Division At Microsoft 排版:Alan Wang Gradle 构建服务器 (Build Server for Gradle) 在九月份,我们宣布 Microsoft 和 Gradle 联手探索了一种基于 Build Server Protocol(B…

用户运营:如何搭建用户分析体系

在运营的工作范畴中,用户运营是很重要的一个环节,甚至有公司会设置专门的“用户运营”岗位。 用户运营的价值体现在多个方面,不仅可以帮助引流、吸引更多用户使用产品,在用户正式使用产品之后的运营则更为重要。通过日常用户运营&…

思源笔记的优缺点 vs Obsidian vs Logseq vs Trilium

新用户对思源笔记的印象。(PS:两年前我试用过思源笔记,被卡顿劝退了) 优点 相比obsidian, 可在文档树拖拽 拖拽调整笔记顺序 拖拽使一个笔记成为另一个笔记的子笔记,树状结构 设置-文档树,默认…

儿童玩具上架亚马逊和国际站及TEMU平台CPC认证

儿童玩具上架亚马逊和国际站及TEMU平台CPC认证办理 最近相当火爆的玩具重力萝卜刀也在全网做屏霸,听上去像是一种能让你在虚拟世界中模拟挖矿的神奇工具。但实际上,它是一种新型玩具,不仅具备重力感应功能,还可以进行切割和挖掘。…

合璧之光,共创辉煌|明道云伙伴大会2023圆满结束

2023年11月3日至11月4日,“合璧之光明道云伙伴大会2023”在上海星河湾酒店顺利举行,报名参会人数超过1800人。大会邀请到明道云标杆客户及合作伙伴分享组织落地零代码的经验及各行业领域解决方案,包括越秀集团、豫园股份、远大医药&#xff0…

CTF-虚拟机——【前置知识三】

文章目录 内存虚拟化常见缩写虚拟机内存访问原理影子页表扩展页表VPID(Virtual Processor Identifier):TLB(Translation Lookaside Buffer)资源优化 内存虚拟化 能够提供在Guest机制中识别为从零开始的连续的物理地址…

redis运维(九)字符串(二)字符串过期时间

一 字符串过期时间 细节点: 注意命令的入参和返回值 ① 再谈过期时间 说明: 设置key的同时并且设置过期时间,是一个原子操作 ② ttl 检查过期时间 ③ persist 删除过期时间 ④ redis 删除过期key的机制 ⑤ 惰性删除 惰性理解:让过期…

redis运维(八)数据类型(一)字符串

一 字符串 说明: 不需要精通,但是得有一个粗略的认识,然后利用help command查看具体使用仅做记录查询 ① 基础概念 说明: ex是用来收敛内存使用率备注: 早期set是不带ex的默认: 不设置ex,是常驻内存 key和value的命名规范 …

浅谈基于云计算的环境智能监控系统

随着经济的飞速发展,环境污染也越来越严重,环境监控成为了政府与社会关注的焦点。本文提出了一种基于云计算的环境智能监控系统——EasyCVR,该系统综合应用了传感器、云计算、大数据、人工智能等技术,具有实时、准确、高效的监控能…

Docker安装MinIO遇到的问题汇总——持续更新中

文章目录 Docker安装MinIO遇到的坑前言问题1:执行docker run报错Error response from daemon问题2:启动MinIO容器浏览器无法访问问题3:上传文件报错InvalidResponseException问题4:上传文件报错Connection refused最终的启动指令问…

Linux系统(CentOS7)上安装MYSQL8.x

Linux系统是CentOS7版本,今天在新电脑上安装MYSQL,跟着网上的文章,尝试了好几次,都是启动失败,删了安,安了删,搞了一下午,头昏脑胀,网上的一些文章太乱了,每种…

CSS样式穿透

当我们在vue项目中使用第三方组件时,有时候需要去修改某些元素的样式,但有时写的css样式不会覆盖组件的样式,所以要用到样式穿透。 常用的方法有这几种:(1)>>> (2)/deep/ …