如何安装和使用 Redis

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

关于 Redis

Redis,于2009年开发,是一个灵活的、开源的、键值数据存储。在其他NoSQL数据库(如Cassandra、CouchDB和MongoDB)的基础上,Redis允许用户存储大量数据,而不受关系数据库的限制。此外,它还被比作memcache,并且可以使用其基本元素作为带持久性的缓存。

注意: 通过在启动时将 此脚本添加到Droplet的用户数据,可以自动在Droplet上安装Redis。查看 此教程以了解有关Droplet用户数据的更多信息。

设置

在安装Redis之前,需要下载一些先决条件,以尽可能简化安装过程。

首先更新所有apt-get软件包:

sudo apt-get update

一旦进程完成,下载一个带有构建基本要素的编译器,这将帮助我们从源代码安装Redis:

sudo apt-get install build-essential

最后,我们需要下载tcl:

sudo apt-get install tcl8.5

安装Redis

在服务器上下载了所有先决条件和依赖项后,我们可以开始从源代码安装Redis:

下载Redis.io的最新稳定版本tarball。

wget http://download.redis.io/releases/redis-stable.tar.gz

解压并切换到该目录:

tar xzf redis-stable.tar.gz
cd redis-stable

继续执行make命令:

make

运行推荐的make test:

make test

最后运行make install,将程序安装到系统范围内。

sudo make install

安装程序后,Redis附带一个内置脚本,用于设置Redis作为后台守护程序运行。

要访问该脚本,请进入utils目录:

cd utils

然后,运行Ubuntu/Debian安装脚本:

sudo ./install_server.sh

当脚本运行时,您可以通过按Enter键选择默认选项。脚本完成后,redis-server将在后台运行。

您可以使用以下命令启动和停止Redis(数字取决于安装过程中设置的端口。6379是默认端口设置):

sudo service redis_6379 start
sudo service redis_6379 stop

然后,您可以通过输入以下命令访问redis数据库:

redis-cli

现在您已经安装并运行了Redis。提示将如下所示:

redis 127.0.0.1:6379>

要将Redis设置为在启动时自动启动,请运行:

sudo update-rc.d redis_6379 defaults

保护Redis

默认情况下,Redis服务器允许从任何地方进行连接,这是不安全的。将绑定到localhost将限制对服务器本身的访问,这是保护服务器的良好第一步。

打开Redis配置文件进行编辑:

sudo nano /etc/redis/6379.conf

找到此行并确保它已取消注释(如果存在#,请删除):

bind 127.0.0.1

这只是保护Redis实例的第一步。有关如何保护服务器的更多信息,请参阅文章如何在Ubuntu 14.04上保护您的Redis安装。

Redis操作

向字符串(最基本的Redis数据类型)添加信息的简单命令可能如下所示:

> SET users:GeorgeWashington "job: President, born:1732, dislikes: cherry trees"
OK

在这种情况下,命令SET后面跟着键(users:GeorgeWashington),然后是值(字符串本身)。

Redis中的冒号对其操作没有影响。但是,它们可以用于描述要填充的键。

我们可以使用“GET”命令检索新字符串的详细信息:

GET users:GeorgeWashington
"job: President, born:1732, dislikes: cherry trees"

范围:

在检索数据时,您可以使用两个参数定义范围:第一个和最后一个元素(第一个元素被视为0)。如果您的结束参数为-1,则将包括列表末尾的所有元素。例如,如果列表包含彩虹的6种颜色(按经典的ROYGBV排列),您将能够看到以下结果:

> LRANGE ROYGBV 0 3
1) "red"
2) "orange"
3) "yellow"
4) "green"
> LRANGE ROYGBV 0 -1
1) "red"
2) "orange"
3) "yellow"
4) "green"
5) "blue"
6) "violet"
> LRANGE ROYGBV 3 -1
1) "green"
2) "blue"
3) "violet"

过期:

虽然Redis在存储信息方面非常有帮助,但它也可以用于系统地过期数据。

可以使用EXPIRE命令指定键应存在的时间长度,可以使用Unix时间戳(自1970年1月1日以来的秒数)指定。可以控制过期的两个有用命令是EXPIRE(设置键应存在的时间长度)和TTL(显示键过期前的剩余时间)。

> SET classified:information "Secret Stuff"
OK
> EXPIRE classified:information 45
(integer) 1
> TTL classified:information
(integer) 31

在过期后尝试检索信息将返回“nil”:

> GET classified:information
(nil)

递增:

Redis还具有原子操作中递增其数据库中的字符串的能力。如果正在进行递增值的过程,则在同一时间内不会有其他命令可以执行,数字将在整个数据库中保持一致。

> SET population 6
OK
> INCRBY population 10
(integer) 16
> INCR population
(integer) 17

事务:

Redis还具有执行事务的能力,必须遵守两个原则:1)命令必须按顺序执行。它们不会在过程中被其他请求中断。2)事务必须完整地处理。

事务以MULTI命令开始,随后使用EXEC命令运行。

如果由于某种原因出现服务器问题导致进程中断,事务将退出,并且Redis将经历一个错误,阻止其重新启动,直到运行命令edis-check-aof并撤消和删除部分事务。

之后,服务器将能够重新启动。

> MULTI
OK
> SET population 6
QUEUED
> INCRBY population 10
QUEUED
> INCR population
QUEUED
redis 127.0.0.1:6379> EXEC
1) OK
2) (integer) 16
3) (integer) 1
4) (integer) 17

Redis数据类型

Redis有五种数据类型:字符串、集合、有序集合、列表、哈希

字符串

字符串是Redis的最基本数据类型。

与字符串相关的一些常见命令包括:

  • SET:将值设置为键
  • GET:从键获取值
  • DEL:删除键及其值
  • INCR:原子地递增键
  • INCRBY:将键递增指定值
  • EXPIRE:键应存在的时间长度(以秒表示)

字符串可用于存储按键排列的对象。

例如:

> SET newkey "the redis string begins"
OK
> GET newkey
"the redis string begins"

集合

如果要组合字符串,可以使用REDIS集合,这是一个无序字符串集合。

集合的一些常见命令包括:

  • SADD:向集合添加一个或多个成员
  • SMEMBERS:获取所有集合成员
  • SINTER:找到多个集合的交集
  • SISMEMBER:检查值是否在集合中
  • SRANDMEMBER:获取随机集合成员

集合在各种情况下都很有用。由于集合的每个成员都是唯一的,因此向集合添加成员不需要“检查然后添加”操作。相反,每当执行SADD命令时,集合将检查项目是否为重复项。

> SADD colors red
(integer) 1
redis 127.0.0.1:6379> SADD colors orange
(integer) 1
redis 127.0.0.1:6379> SADD colors yellow
(integer) 1
redis 127.0.0.1:6379> SADD colors orange
(integer) 0
redis 127.0.0.1:6379> SMEMBERS colors
1) "red"
2) "yellow"
3) "orange"

集合在许多情况下都很有用,例如检查访问页面的唯一IP地址,或使用SRANDMEMBER命令随机提取元素。

有序集合

有序集合有一个直观的名称:它是与数字关联的字符串集合,并且默认按从小到大的顺序排列。

这种数据类型与范围配合得很好,因为它们从一开始就是有序的,因此可以快速地添加、删除或更新值。

有序集合的一些常见命令包括:

  • ZADD:向有序集合添加成员
  • ZRANGE:按索引显示有序集合的成员(默认从低到高)
  • ZREVRANGE:按索引显示有序集合的成员(从高到低)
  • ZREM:从有序集合中删除成员

我们可以使用有序集合创建一个包含世界上最小国家面积(以平方英里表示)的示例有序集合。

> zadd countries 9 Tuvalu
(integer) 1
> zadd countries 62 Liechtenstein
(integer) 1
> zadd countries .7 Monaco
(integer) 1
> zadd countries .2 VaticanCity
(integer) 1
> zadd countries 107 Seychelles
(integer) 1
redis 127.0.0.1:6379> zrange countries 0 -1
1) "VaticanCity"
2) "Monaco"
3) "Tuvalu"
4) "Liechtenstein"
5) "Seychelles"

列表

Redis中的列表是有序值的集合。这与无序的集合形成对比。即使列表中有超过一千万个元素,您也可以快速地将元素添加到列表的开头或结尾。

与列表相关的一些常见命令包括:

  • LPUSH:将值添加到列表的开头
  • RPUSH:将值添加到列表的末尾
  • LPOP:获取并删除列表中的第一个元素
  • RPOP:获取并删除列表中的最后一个元素
  • LREM:从列表中删除元素
  • LRANGE:从列表中获取一系列元素
  • LTRIM:修改列表,使其仅保留指定范围

我们可以创建一个每周负责带午餐的人员列表:

> rpush lunch.provider alice
(integer) 1
> rpush lunch.provider bob
(integer) 2
> rpush lunch.provider carol
(integer) 3
> rpush lunch.provider don
(integer) 4
> rpush lunch.provider emily
(integer) 5

如果我们想要将某人推到队列的前面,我们可以使用LPUSH命令:

lpush lunch.provider zoe
(integer) 6

然后,LRANGE命令将显示我们的整个列表:

lrange lunch.provider 0 -1
1) "zoe"
2) "alice"
3) "bob"
4) "carol"
5) "don"
6) "emily"

列表通常用于创建事件时间表或维护有限数量元素的集合。

哈希

Redis中的哈希是表示具有许多字段的对象的有用工具。它们设置为在小空间中存储大量字段。哈希可以存储超过40亿个字段-值对。

一些常见的哈希命令包括:

  • HMSET:设置多个哈希值
  • HSET:设置具有字符串值的哈希字段
  • HGET:检索哈希字段的值
  • HMGET:检索给定哈希字段的所有值
  • HGETALL:检索哈希中的所有值

我们可以使用哈希来描述一个示例站点用户。

> hmset user:1 username jsmith password 4bAc0s email jsmith@gmail.com
OK
> hgetall user:1
1) "username"
2) "jsmith"
3) "password"
4) "4bAc0s"
5) "email"
6) "jsmith@gmail.com"

如果需要查找特定信息,HMGET仅显示请求字段的值。

> hmget user:1 username email
1) "jsmith"
"jsmith@gmail.com"

结论

自发布以来,Redis迅速赢得了很多人的喜爱,并被GitHub、Flickr、Disqus和Craigslist等公司所利用。此外,Redis可以与大多数编程语言一起使用。

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

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

相关文章

向日葵RCE复现(CNVD-2022-10270/CNVD-2022-03672)

一、环境 1.1 网上下载低版本的向日葵<2022 二、开始复现 2.1 在目标主机上打开旧版向日葵 2.2 首先打开nmap扫描向日葵主机端口 2.3 在浏览器中访问ip端口号cgi-bin/rpc?actionverify-haras &#xff08;端口号&#xff1a;每一个都尝试&#xff0c;直到获取到session值…

Spring条件装配:灵活配置你的应用

文章目录 摘要1. 条件装配概述1.1 什么是条件装配1.2 为什么需要条件装配 2. 使用Conditional注解2.1 Conditional注解简介2.2 编写自定义条件类2.3 应用Conditional注解 3. 内置的条件注解3.1 ConditionalOnClass3.2 ConditionalOnMissingBean3.3 ConditionalOnProperty 4. 使…

PHP For循环

PHP 中的 for 循环是另一种基本的循环控制结构&#xff0c;它允许你重复执行一段代码块指定次数。for 循环通常用于当你事先知道循环需要执行的确切次数时。 基本语法 for (初始化表达式; 循环条件; 更新表达式) {// 循环体// 当循环条件为真时执行的代码 } 初始化表达式&am…

Git基本用法

仓库初始化 创建目录(git_test01)并在目录下打开gitbash 初始化git仓库 git init 创建文件并提交 在目录下创建文件 touch file01.txt 将修改加入暂存区 git add 将修改提交到本地仓库&#xff0c;提交记录内容为“update ***” git commit -m "update ***" 查看…

动手学深度学习V2每日笔记(权重衰退+Dropout)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1UK4y1o7dy/vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录&#xff0c;内容不会特别严谨仅供参考。 1.函数目录…

科普文:万字详解Kafka基本原理和应用

一、Kafka 简介 1. 消息引擎系统ABC Apache Kafka是一款开源的消息引擎系统&#xff0c;也是一个分布式流处理平台。除此之外&#xff0c;Kafka还能够被用作分布式存储系统&#xff08;极少&#xff09;。 A. 常见的两种消息引擎系统传输协议&#xff08;即用什么方式把消息…

【机器学习】探索图神经网络 (GNNs): 揭秘图结构数据处理的未来

&#x1f48e; 欢迎大家互三&#xff1a;2的n次方_ ​ &#x1f48e;1. 引言 图结构数据在现实世界中无处不在&#xff0c;从社交网络中的用户关系&#xff0c;到推荐系统中的用户-物品交互&#xff0c;再到生物信息学中的分子结构。传统的机器学习模型在处理这些数据时常常力…

【Unity插件】Editor Console Pro:提升开发效率的神器

在 Unity 开发过程中&#xff0c;控制台&#xff08;Console&#xff09;是我们排查错误、获取信息的重要窗口。而 Editor Console Pro 则是 Unity 编辑器控制台的强大替代品&#xff0c;为 Unity 的控制台带来了更多实用的功能和改进&#xff0c;极大地提升了开发效率。 一、…

力扣刷题----42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图&#xf…

PHP超级全局变量

PHP 中的超级全局变量&#xff08;Superglobals&#xff09;是 PHP 4.1.0 引入的一个特性&#xff0c;它们在脚本的全部作用域中都是可用的。这意味着一旦一个脚本被载入&#xff0c;这些变量就可以在脚本的任何地方被访问&#xff0c;无论是在函数内部还是外部。PHP 提供了几个…

TCP程序设计

TCP概述 建立连接 客户端和服务器端在建立连接时&#xff1a; 服务端是典型的监听接受连接的模式&#xff0c;就是ListenAccept 客户端是主动建立连接的模式&#xff0c;就是Dial Go语言中使用 net包实现网络的相关操作&#xff0c;包括我们TCP的操作。 用于建立连接的典型…

【JavaEE】阻塞队列

目录 一.阻塞队列(Blocking Queue) 1.什么是阻塞队列 2.特性 二.生产者消费者模型 1.什么是生产者消费者模型&#xff1f; 2.生产者消费模型的好处 2.1解耦合 2.2削峰填谷 三.如何在java中使用阻塞队列 四.模拟实现阻塞队列 1.加锁 2.阻塞等待实现 3.解决interru…

学习c语言第十三天(结构体)

一.结构体声明 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 描述复杂对象。 结构体成员可以是标量、数组、指针、结构体。 定义和初始化&#xff1a; struct peo {char namer[20];char tele[12];char sex[5];int high; }; s…

支付交易——支付渠道与路由引擎

摘要 支付渠道与路由引擎是现代支付系统中关键的组成部分。支付渠道指的是连接商家和支付网络的通道,如信用卡、支付宝等。而路由引擎则负责根据交易特征和规则,将支付请求导向最合适的渠道,以确保安全高效的资金转移。这些系统不仅简化了支付过程,还增强了支付系统的灵活…

git 迁移仓库的方法

git Git是一个开源的分布式版本控制系统&#xff0c;由Linus Torvalds在2005年创建&#xff0c;用于有效、高速地处理从小到大的项目管理。它最初是为Linux内核开发而设计的&#xff0c;但很快被广泛用于各种项目。 以下是Git的一些主要特性&#xff1a; 分布式架构&#xff…

Python设计模式 - 工厂方法模式

定义 工厂方法模式是一种创建型设计模式&#xff0c;它定义一个创建对象的接口&#xff0c;让其子类来处理对象的创建&#xff0c;而不是直接实例化对象。 结构 抽象工厂&#xff08;Factory&#xff09;&#xff1a;声明工厂方法&#xff0c;返回一个产品对象。具体工厂类都…

4.JAVA-运算符

算数运算符 隐式类型转换 强制转换 字符串操作 字符相加 小结 自增自减运算符 赋值运算符 关系运算符 逻辑运算符 短路逻辑运算 三元运算符 运算符优先级 这里小括号优先于所有&#xff0c;所以想要哪一个优先运算&#xff0c;就可以将哪一个用小括号扩起来&#xff0c;比较方便…

酒店押金原路退回系统开通方法,手机查看报表

一、酒店押金管理有哪些&#xff1f; 1.渠道有银行预授权 2.微信押金支付 3.酒店押金系统 4.支付押金管理 二、专业酒店押金管理VS银行 序号功能专业押金系统银行预授权1收款方式支持微信、支付宝、银联app、信用卡、花呗需要带银行卡刷卡2资金安全区分房费和押金&#x…

qt多线程

QFuture<int> future QtConcurrent::run(someFunction, 42);QFutureWatcher<int> watcher; watcher.setFuture(future);// 连接信号槽以处理任务完成后的操作 QObject::connect(&watcher, &QFutureWatcher<int>::finished, [&]() {int result …

PermissionError: [Errno 13] Permission denied

PermissionError: [Errno 13] Permission denied 目录 PermissionError: [Errno 13] Permission denied 【常见模块错误】 【错误原因】 【解决方案】 检查文件或目录的权限 确保文件路径正确 关闭其他占用文件的程序 运行程序时提升权限 更改 Python 的工作目录 示例代…