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相关

  1. 引入依赖

首先,您需要将Jedis库添加到项目的依赖中。如果您使用Maven,可以在pom.xml文件中添加以下依赖:

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version>
</dependency>
  1. 连接到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();}
}
  1. 操作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)返回的是一个无序集合,即使你添加元素的顺序是固定的,返回的元素顺序也可能是随机的。

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

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

相关文章

为什么越来越多的企业在考虑将ERP从云端迁移到本地?

越来越多的企业在考虑将核心ERP迁移到本地部署&#xff0c;原来实施的时候局限于业务规模、实施成本的原因采用云端部署的方式越来越不再适应于企业规模的发展、系统应用和数据安全的要求。 因此他们都宁愿将云端ERP的数据迁移到本地&#xff0c;使得系统数据和安全更加可控。…

[Linux 进程控制(二)] 写时拷贝 - 进程终止

文章目录 1、写时拷贝2、进程终止2.1 进程退出场景2.1.1 退出码2.1.2 错误码错误码 vs 退出码2.1.3 代码异常终止引入 2.2 进程常见退出方法2.2.1 exit函数2.2.2 _exit函数 本片我们主要来讲进程控制&#xff0c;讲之前我们先把写时拷贝理清&#xff0c;然后再开始讲进程控制。…

QSlider使用笔记

最近做项目使用到QSlider滑动条控件&#xff0c;在使用过的过程中&#xff0c;发现一个问题就是点滑动条上的一个位置&#xff0c;滑块并没有移动到鼠标点击的位置&#xff0c;体验感很差&#xff0c;于是研究了下&#xff0c;让鼠标点击后滑块移动到鼠标点击的位置。 1、event…

node-sass版本与NodeJS版本不匹配的问题

npm install 报错如下 npm ERR! code 1 npm ERR! path D:\Project\git_Product\YYYY\user\node_modules\node-sass npm ERR! command failed npm ERR! command C:\WINDOWS\system32\cmd.exe /d /s /c node scripts/build.js 问题原因 node-sass 与 node 版本不匹配 卸载Node…

【计算机图形学】实验二 用扫描线算法实现多边形填充

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

Codeforces Round 756 (Div. 3)(E2,F)

CF 1161EEscape The Maze (hard version)&#xff08;DFS&#xff09; 题意 给定一个n点n-1条边的树&#xff0c;一个人在1号点&#xff0c;他的朋友们在其他点&#xff0c;每过一秒&#xff0c;每个人都可以移动一步&#xff0c;问这个人在走到任意叶子节点的过程中是否能不被…

9.SELinux

目录 1. 概述 1.1. 概念 1.2. 作用&#xff1a; 1.3. SELinux与传统的权限区别 2. SELinux工作原理 2.1. 名词解释 2.1.1. 主体&#xff08;Subject&#xff09; 2.1.2. 目标&#xff08;Object&#xff09; 2.1.3. 策略&#xff08;Policy&#xff09; 2.1.4. 安全上…

详解Redis哨兵模式下,主节点掉线而重新选取主节点的流程

⭐最核心的结论&#xff1a;所谓选举的过程不是直接选出新的主节点&#xff0c;而是先在哨兵节点中选出 leader &#xff0c;再由 leader 负责后续主节点的指定。 假定当前环境&#xff1a; 三个哨兵(sentenal1, sentenal2, sentenal3)一个主节点(redis-master)两个从节点(red…

接口测试框架对比

公司计划系统的开展接口自动化测试&#xff0c;需要我这边调研一下主流的接口测试框架给后端测试&#xff08;主要测试接口&#xff09;的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求&#xff0c;看哪个框架更适合我们。 需求 1、接口编写…

MySQL深入——17(主备延迟)

备库为什么延迟好几个小时 之前说的延迟为分钟级的&#xff0c;备库稳定之后都能追上来&#xff0c;但若备库的执行日志速度持续低于主库的生成日志速度&#xff0c;延迟就有可能变为小时级的。这就设计到了备库的并行复制能力。 InnoDB支持行锁&#xff0c;除了并发事务都更…

端到端实现高精地图重建(TopoNet解读和横评)

论文出处 [2304.05277] Graph-based Topology Reasoning for Driving Scenes (arxiv.org)https://arxiv.org/abs/2304.05277 TopoNet TopoNet的目标是从车辆上安装的多视角摄像头获取图像&#xff0c;感知实体并推理出驾驶场景的拓扑关系&#xff0c;实现端到端预测&#xf…

【自动化测试】----Java的单元测试工具Junit5

目录 支持Java的最低版本为8在pom.xml添加依赖Junit提供的注解功能 断言 Assertion类提供的一些方法测试用例执行顺序 &#xff08;为了预防测试用例执行顺序错误&#xff09;参数化 &#xff08;假设登陆操作&#xff0c;用户名和密码很多&#xff0c;尽可能通过一个测试用例…

2024/2/4

第三章 类与构造函数 一&#xff0e;选择题 1、下列不能作为类的成员的是&#xff08;B&#xff09; A. 自身类对象的指针 B. 自身类对象 C. 自身类对象的引用 D. 另一个类的对象 2、假定AA为一个类&#xff0c;a()为该类公有的函数成员&#xff0c;x为该类的一个对象&am…

Java多线程--JDK5.0新增线程创建方式

文章目录 一、新增方式1&#xff1a;实现Callable接口&#xff08;1&#xff09;介绍&#xff08;2&#xff09;案例&#xff08;3&#xff09;总结对比 二、新增方式2&#xff1a;使用线程池&#xff08;1&#xff09;问题与解决思路1、现有问题2、解决思路3、好处 &#xff0…

Swift Vapor 教程(查询数据、插入数据)

上一篇简单写了 怎么创建 Swift Vapor 项目以及在开发过程中使用到的软件。 这一篇写一个怎么在创建的项目中创建一个简单的查询数据和插入数据。 注&#xff1a;数据库配置比较重要 先将本地的Docker启动起来&#xff0c;用Docker管理数据库 将项目自己创建的Todo相关的都删掉…

以小猪o2o生活通v17.1为例简要分析SWOOLE加密破解,swoole_loader加密破解swoole加密逆向后的代码修复流程(个人见解高手掠过)

现在用Php加密五花八门除了组件就是混淆&#xff0c;在组件里面响当当的还属swoole&#xff0c;SWOOLEC是不错的国产加密&#xff0c;值得推荐官方宣称是永远无法破解的加密算法&#xff0c;针对swoole compiler的代码修复我谈谈我的看法&#xff0c;以小猪o2o生活通&#xff0…

PyTorch 2.2 中文官方教程(十九)

使用 RPC 进行分布式管道并行 原文&#xff1a;pytorch.org/tutorials/intermediate/dist_pipeline_parallel_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Shen Li 注意 在github中查看并编辑本教程。 先决条件&#xff1a; PyTorc…

蓝桥杯备战(AcWing算法基础课)-高精度-乘-低精度

目录 前言 1 题目描述 2 分析 2.1 关键代码 2.2 关键代码分析 3 代码 前言 详细的代码里面有自己的理解注释 1 题目描述 给定两个非负整数&#xff08;不含前导 00&#xff09; A 和 B&#xff0c;请你计算 AB 的值。 输入格式 共两行&#xff0c;第一行包含整数 A&a…

04-Java建造者模式 ( Builder Pattern )

建造者模式 摘要实现范例 建造者模式&#xff08;Builder Pattern&#xff09;使用多个简单的对象一步一步构建成一个复杂的对象 一个Builder 类会一步一步构造最终的对象&#xff0c;该 Builder 类是独立于其他对象的 建造者模式属于创建型模式&#xff0c;它提供了一种创建对…

深度学习手写字符识别:训练模型

说明 本篇博客主要是跟着B站中国计量大学杨老师的视频实战深度学习手写字符识别。 第一个深度学习实例手写字符识别 深度学习环境配置 可以参考下篇博客&#xff0c;网上也有很多教程&#xff0c;很容易搭建好深度学习的环境。 Windows11搭建GPU版本PyTorch环境详细过程 数…