当前位置: 首页 > news >正文

如何安装和使用 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可以与大多数编程语言一起使用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • App测试分发的秘密:如何让你的应用程序快速上线
  • 本地部署大模型
  • 49、PHP 实现堆排序
  • vue3 + element plus使用iconfont 自定义font组件颜色大小可修改
  • 2024 CISCN总决赛 ShareCard
  • CPU、GPU等处理器介绍
  • 深入探索非线性数据结构:树与图的世界
  • 基于opencv的人脸识别(实战)
  • 贪心加暴力枚举
  • Postman中的A/B测试实践:优化API性能的科学方法
  • Mysql备份恢复
  • redis的使用场景-热点数据缓存
  • 【技术升级】Docker环境下Nacos平滑升级攻略,安全配置一步到位
  • 论文阅读:(DETR)End-to-End Object Detection with Transformers
  • B端系统UI个性化设计:感受定制之美
  • 《深入 React 技术栈》
  • 【node学习】协程
  • 11111111
  • Angular数据绑定机制
  • Electron入门介绍
  • Go 语言编译器的 //go: 详解
  • Hexo+码云+git快速搭建免费的静态Blog
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • java概述
  • java中的hashCode
  • leetcode-27. Remove Element
  • PAT A1050
  • SwizzleMethod 黑魔法
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 分布式任务队列Celery
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 今年的LC3大会没了?
  • 聊聊redis的数据结构的应用
  • 删除表内多余的重复数据
  • 数据科学 第 3 章 11 字符串处理
  • 小程序button引导用户授权
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • # Redis 入门到精通(一)数据类型(4)
  • ### RabbitMQ五种工作模式:
  • #define、const、typedef的差别
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (八)Flask之app.route装饰器函数的参数
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (一)VirtualBox安装增强功能
  • (一)基于IDEA的JAVA基础10
  • (转)视频码率,帧率和分辨率的联系与区别
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 5种线程安全集合
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET 反射的使用
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET中winform传递参数至Url并获得返回值或文件
  • @Bean注解详解