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(),(),…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
CppCon 2015 学习:REFLECTION TECHNIQUES IN C++
关于 Reflection(反射) 这个概念,总结一下: Reflection(反射)是什么? 反射是对类型的自我检查能力(Introspection) 可以查看类的成员变量、成员函数等信息。反射允许枚…...
