redis基本数据结构介绍
Redis(Remote Dictionary Server)是一个开源的高性能键值对数据库,它支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等。这些数据结构为开发者提供了丰富的数据操作方式,使得Redis在缓存、消息队列、排行榜等场景中有着广泛的应用。
1.字符串(Strings)
字符串是Redis最基本的数据结构。一个字符串类型的值最多可以是512MB。字符串类型可以包含任何数据,如数字、字符串、二进制数据等。Redis的字符串是动态的,可以修改其中的一部分。
特性:
* 可修改:可以使用APPEND命令向已存在的字符串追加内容。
* 原子性:Redis的所有操作都是原子性的,这意味着它们要么完全执行,要么完全不执行。
应用场景:
* 缓存:将热点数据存储在Redis中,提高读取速度。
* 计数器:利用INCR、DECR等命令实现。**实例与操作:**
# 设置键为name,值为"redis"的字符串
SET name "redis"# 获取键为name的值
GET name# 将键为name的值追加" is great"
APPEND name " is great"# 获取键为name的值(此时值为"redis is great")
GET name
2.哈希(Hashes)
哈希是字符串字段和字符串值之间的映射表,适合存储对象。
特性:
* 字段和值都是字符串类型。
* 适合存储结构化数据。**应用场景:*** 存储用户信息:如用户ID、姓名、邮箱等。
实例与操作:
# 设置哈希表user:1的字段name为"Alice"
HSET user:1 name "Alice"# 获取哈希表user:1的字段name的值
HGET user:1 name# 设置哈希表user:1的多个字段
HMSET user:1 age 25 email "alice@example.com"# 获取哈希表user:1的所有字段和值
HGETALL user:1
3.列表(Lists)
列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到头部(左边)或者尾部(右边)。
特性:
* 有序:元素按照插入顺序排列。
* 可重复:列表中的元素可以重复。**应用场景:*** 消息队列:使用LPUSH和RPOP命令实现生产者消费者模式。
* 排行榜:使用ZREVRANGE等命令实现更复杂的排行榜功能(这需要使用有序集合)。**实例与操作:**
# 在列表mylist的左边插入元素"A"
LPUSH mylist "A"# 在列表mylist的右边插入元素"B"
RPUSH mylist "B"# 获取列表mylist的所有元素(结果为["A", "B"])
LRANGE mylist 0 -1
4.集合(Sets)
集合是字符串类型的无序集合,它是通过哈希表实现的。
特性:
* 无序:集合中的元素没有顺序。
* 不重复:集合中的元素不会重复。**应用场景:*** 共同好友:使用SINTER命令找出多个用户的共同好友。
* 标签系统:给用户或文章打标签,使用集合的交集、并集等操作实现复杂的查询。**实例与操作:**
# 向集合myset添加元素"A"
SADD myset "A"# 向集合myset添加元素"B"
SADD myset "B"# 检查元素"A"是否是集合myset的成员
SISMEMBER myset "A"# 获取集合myset的所有成员
SMEMBERS myset
5.有序集合(Sorted Sets)
有序集合和集合一样也是字符串类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个浮点数类型的分数,Redis正是通过分数来为集合中的成员进行从小到大的排序。
特性:
* 有序:元素按照分数从小到大排序。
* 不重复:集合中的元素不会重复。**应用场景:*** 排行榜:有序集合非常适合实现排行榜功能,如游戏得分榜、文章热度榜等。
实例与操作:
# 向有序集合myzset添加元素"A",分数为1
ZADD myzset 1 "A"# 向有序集合myzset添加元素"B",分数为2
ZADD myzset 2 "B"# 获取有序集合myzset的所有元素和分数
ZRANGE myzset 0 -1 WITHSCORES# 获取有序集合myzset中分数在1到2之间的元素
ZRANGEBYSCORE myzset 1 2
以上就是对Redis的基本数据结构的详细介绍,包括它们的特性和应用场景,以及相应的实例和操作。
6.java api相关
- 引入依赖
首先,您需要将Jedis库添加到项目的依赖中。如果您使用Maven,可以在pom.xml
文件中添加以下依赖:
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version>
</dependency>
- 连接到Redis
在Java中使用Jedis库连接到Redis服务器:
import redis.clients.jedis.Jedis;public class RedisExample {public static void main(String[] args) {// 创建Jedis实例并连接到Redis服务器Jedis jedis = new Jedis("localhost");// 验证连接System.out.println("Connection successful: " + jedis.ping());// 在此处执行Redis操作// 关闭连接jedis.close();}
}
- 操作Redis数据结构
以下是如何使用Jedis库操作Redis基本数据结构的示例:
- 字符串(Strings)
jedis.set("key", "value");
String value = jedis.get("key");
System.out.println(value);
- 哈希表(Hashes)
jedis.hset("hashKey", "field1", "value1");
jedis.hset("hashKey", "field2", "value2");
String fieldValue = jedis.hget("hashKey", "field1");
System.out.println(fieldValue);
- 列表(Lists)
jedis.lpush("listKey", "value1", "value2", "value3");
List<String> listValues = jedis.lrange("listKey", 0, -1);
System.out.println(listValues);
- 集合(Sets)
jedis.sadd("setKey", "member1", "member2", "member3");
Set<String> setValues = jedis.smembers("setKey");
System.out.println(setValues);
- 有序集合(Sorted Sets)
jedis.zadd("sortedSetKey", 1, "member1");
jedis.zadd("sortedSetKey", 2, "member2");
jedis.zadd("sortedSetKey", 3, "member3");
Set<String> sortedSetValues = jedis.zrange("sortedSetKey", 0, -1);
System.out.println(sortedSetValues);
以上代码示例展示了如何使用Jedis库连接到Redis服务器并执行基本数据结构操作。
7.python api相关
首先,确保你已经安装了redis-py
库。你可以使用pip
来安装它:
pip install redis
然后,你可以使用以下代码示例来与Redis进行交互:
import redis# 创建一个Redis连接
r = redis.Redis(host='localhost', port=6379, db=0)# 字符串(Strings)
r.set('mykey', 'Hello Redis!')
value = r.get('mykey')
print(value.decode('utf-8')) # 输出: Hello Redis!# 哈希表(Hashes)
r.hset('myhash', 'field1', 'value1')
r.hset('myhash', 'field2', 'value2')
field_value = r.hget('myhash', 'field1')
print(field_value.decode('utf-8')) # 输出: value1# 列表(Lists)
r.lpush('mylist', 'value1')
r.lpush('mylist', 'value2')
r.lpush('mylist', 'value3')
list_values = r.lrange('mylist', 0, -1)
print(list_values) # 输出: ['value3', 'value2', 'value1']# 集合(Sets)
r.sadd('myset', 'member1')
r.sadd('myset', 'member2')
r.sadd('myset', 'member3')
set_values = r.smembers('myset')
print(set_values) # 输出: {'member1', 'member2', 'member3'} 的无序集合# 有序集合(Sorted Sets)
r.zadd('mysortedset', {'member1': 1, 'member2': 2, 'member3': 3})sorted_set_values = r.zrange('mysortedset', 0, -1, withscores=True)
print(sorted_set_values) # 输出: [(b'member1', 1.0), (b'member2', 2.0), (b'member3', 3.0)]# 关闭连接(实际上,redis-py使用连接池,因此你通常不需要手动关闭连接)
# 但是,如果你确实需要关闭它,可以这样做:
# del r # 或者让Python的垃圾回收来处理
请注意,redis-py
返回的字节字符串(bytes
)在Python 3中需要解码为普通字符串(str
),这就是为什么我们在上面的示例中使用了.decode('utf-8')
方法。另外,集合(Sets)返回的是一个无序集合,即使你添加元素的顺序是固定的,返回的元素顺序也可能是随机的。
相关文章:
redis基本数据结构介绍
Redis(Remote Dictionary Server)是一个开源的高性能键值对数据库,它支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等。这些数据结构为开发者提供了丰富的数据操作方式,使得Redis在缓存、消息队列、排行榜…...
云数据库RDS云监控
1. 什么是云数据库RDS?它有哪些特点? 云数据库RDS是一种在线关系型数据库服务,它具备的特点包括: 安全可靠:提供了容灾、备份、恢复等高可用性功能,确保数据的安全与可靠。弹性伸缩:用户可以根…...

全自动网页生成系统重构版源码
全自动网页生成系统重构版源码分享,所有模板经过精心审核与修改,完美兼容小屏手机大屏手机,以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 为用户使用方便考虑,全自动网页制作系统无需繁琐的注…...

Leetcode—33. 搜索旋转排序数组【中等】
2024每日刷题(110) Leetcode—33. 搜索旋转排序数组 实现代码 class Solution { public:int search(vector<int>& nums, int target) {int n nums.size();int l 0, r n - 1;while(l < r) {int m l (r - l) / 2;if(nums[m] target) …...

vulhub中Apache APISIX Dashboard API权限绕过导致RCE(CVE-2021-45232)
Apache APISIX是一个动态、实时、高性能API网关,而Apache APISIX Dashboard是一个配套的前端面板。 Apache APISIX Dashboard 2.10.1版本前存在两个API/apisix/admin/migrate/export和/apisix/admin/migrate/import,他们没有经过droplet框架的权限验证&…...
JavaSE习题 使用函数求最大值、求最大值方法的重载和求和方法的重载
目录 1 使用函数求最大值2 求最大值方法的重载3 求和方法的重载 1 使用函数求最大值 使用函数求最大值:创建方法求两个数的最大值max2,随后再写一个求3个数的最大值的函数max3。 要求: 在max3这个函数中,调用max2函数ÿ…...

英码科技携手昇腾共建算力底座:推出EA500I超强AI处理能力边缘计算盒子!
在数字经济浪潮中,算力已成为不可或缺的驱动力,为各行各业的数字化转型提供了强大的推动力。面对多元化和供需不平衡的挑战,需要实现从理论架构到软硬件实现的质的飞跃,以满足持续增长的算力需求,华为昇腾在这一方面展…...

蓝桥杯每日一题-----数位dp练习
题目 链接 参考代码 写了两个,一个是很久以前写的,一个是最近刚写的,很久以前写的时候还不会数位dp所以写了比较详细的注释,这两个代码主要是设置了不同的记忆数组,通过这两个代码可以理解记忆数组设置的灵活性。 im…...

JS(react)图片压缩+图片上传
上传dome var fileNodeTakeStock: any createRef();<inputref{fileNodeTakeStock}onChange{showPictureTakeStock}style{{ display: "none" }}id"fileInpBtn"type"file"accept"image/*" //限制上传格式multiple{false}capture&qu…...
WPF DispatcherTimer用法
System.Windows.Threading.DispatcherTimer 类主要用于WPF应用程序中进行周期性任务调度,并且保证这些任务在UI线程上执行。 这对于需要更新界面或与UI元素交互的定时操作非常有用,因为WPF的所有UI操作都必须在主线程(即Dispatcher线程&…...

【网络安全实验】snort实现高级IDS
注:本实验分别使用kali和CentOS6.8进行测试,可惜的是使用kali进行实验过程中遇到了困难,未能完成完整实验,而使用CentOS6.8成功完成了完整实验。 实验中用到的软件: https://download.csdn.net/download/weixin_5255…...

19.HarmonyOS App(JAVA)依赖布局DependentLayout使用方法
layout/ability_main.xml 显示位置不对:检查布局文件ohos:lef_of "id:tuzi",比如显示在兔子的左侧,这里就会显示不对。 需要id前没有$符号。改为: ohos:lef_of "$id:tuzi" <?xml version"1.0" encodi…...

玩家笔记:幻兽帕鲁搭建服务器开服教程
玩转幻兽帕鲁服务器,阿里云推出新手0基础一键部署幻兽帕鲁服务器教程,傻瓜式一键部署,3分钟即可成功创建一台Palworld专属服务器,成本仅需26元,阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…...
Liunx基本指令
目录 1、ls 列出当前路径下的文件 2、pwd 打印当前工作目录 (print working directory) 3、cd 进入路径 4、mkdir 创建文件夹(make dirctory) 5、touch 创建文件 6、cp 复制(copy) 7、mv 移动/剪切、重命名 8、rm 删除 (remover) 9、vim 文本编辑器 10、cat 打开文件…...

面试题:Redis 分布式锁存在什么问题 ?如何解决 ?
文章目录 如何实现分布式锁2. Redis 分布式锁存在什么问题2.1 解决死锁问题2.2 解决锁误删问题 如何实现分布式锁 Redis 天生就可以作为一个分布式系统来使用,所以它实现的锁都是分布式锁。 Redis 可以通过 setnx(set if not exists)命令实…...

Container 命令ctr、crictl 命令
1、 Containerd和Docker的架构区别 Docker vs. Containerd: 2、ctr & crictl的区别 ctr是containerd的一个客户端工具 crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 Kubernetes 节点上的容器运行时和应用程序 crictl 则直接对…...
设计模式——七大原则
更多内容,前往 IT-BLOG 设计模式的目的是为了让程序,具有更好的代码重用性、可读性(编程规范性,便于后期维护和理解)、可扩展性(当需要增加新需求时,非常方便)、可靠性…...

笔记本电脑的WIFI模块,突然不显示了,网络也连接不上
问题复现: 早上,在更新完笔记本电脑的系统之后,连网之后,网络突然直接断开,一查看,WiFi模块居然不见了,开机重启也是如此,这种情况常常出现在更新系统之后,WiFi模块驱动就…...

Pytest 与allure测试报告集成
通过Feature, story, step 记录测试的功能,场景及测试步骤 # login.pylogin_func函数 传入参数是name 和 password 当输入的name和password与数据库db_data中数据一致时,返回“XXX成功登录系统!” 当输入的name存在于数据库db_data但密码不正…...
MySQL 表的增删改查(基础)
1.CRUD 注释:在SQL中可以使用"--空格描述"来表示注释说明 CRUD 即增加(Create).查询(Retrieve).更新(Update).删除(Delete) 2.新增(Create) insert into 表名 values (列,列...); insert into 表名(列名,列名...) values (列,列...); insert into 表名 values(),(),…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...

Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...