Redis介绍以及日常使用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: ​介绍Redis(REmote DIctionary Server)是一个开源的、使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、非关系类型的Key-Value数据库。它提供了多种语言的API,如Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等,使得在各种语言环境下使用Redis都变得非常方便。Redis是一个高性能的Key-Value数据库,其性能在很大程度上补偿了如Memcached这类Key-Value存储的不足,并且在某些场景下,它还可以作为关系数据库的良好补充。它支持的数据结构类型

 介绍

Redis(REmote DIctionary Server)是一个开源的、使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、非关系类型的Key-Value数据库。它提供了多种语言的API,如Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等,使得在各种语言环境下使用Redis都变得非常方便。

Redis是一个高性能的Key-Value数据库,其性能在很大程度上补偿了如Memcached这类Key-Value存储的不足,并且在某些场景下,它还可以作为关系数据库的良好补充。它支持的数据结构类型不仅限于简单的Key-Value,还包括list(链表)、set(集合)、zset(有序集合)和hash(散列)等,这些数据结构类型都支持丰富的操作,如push/pop、add/remove以及取交集、并集、差集等,且这些操作都是原子性的。此外,Redis还支持各种排序功能。

在数据持久化方面,Redis可以将内存中的数据定期写入磁盘,或者将修改操作写入追加的记录文件,以此实现了数据的持久化。这确保了即使在系统重启后,数据也可以被重新加载和使用。

Redis还提供了数据备份功能,即master-slave模式的数据备份。在这种模式下,数据可以从主服务器同步到任意数量的从服务器,从服务器可以是关联其他从服务器的主服务器。这种机制使得Redis可以执行单层树复制,对读取操作的可扩展性和数据冗余提供了很大帮助。

特点

高性能:Redis将数据存储在内存中,因此具有快速的读写性能。它使用了基于内存的数据结构和优化的算法,使得它能够每秒处理数十万次读写操作。

数据持久化:虽然Redis主要在内存中操作数据,但它也支持数据的持久化。具体来说,Redis支持两种数据持久化方式,即RDB(快照)和AOF(日志)。RDB是将内存中的数据定期保存到磁盘上的二进制文件,而AOF则是将数据修改操作记录为追加日志文件。这些功能可以在服务器重启或崩溃后恢复数据。

键值存储:Redis使用键值对存储数据,其中键(Key)是一个唯一的标识符,值(Value)可以是各种数据类型,如字符串、哈希表、列表、集合、有序集合等。这种设计使得Redis可以灵活地应对各种应用场景。

发布订阅模式:Redis支持发布与订阅模式(Pub/Sub),允许客户端订阅一个或多个频道,并在有新消息发布到频道时接收通知。这使得它非常适用于实时消息推送和事件发布/订阅模式。

分布式缓存:Redis提供了分片(Sharding)和复制(Replication)功能,使得它可以在多台服务器上进行水平扩展和高可用性部署。分片将数据分成多个分片存储在不同的节点上,而复制则是将数据复制到多个节点实现冗余和故障转移。

原子性操作:Redis的所有操作都是原子性的,支持事务。所谓的原子性就是对数据的更改要么全部执行,要么全部不执行。

安装(Windows)

由于Redis是绿色软件(解压即用),在官网即可看到Linux的安装包,但是官网没有Windows的,因此此处以Windows作为示例,安装包网址如下Releases · microsoftarchive/redis · GitHub

下载Redis-x64-<版本号>.zip 后解压到需要的目录即可

image.gif 编辑

双击redis-server.exe即可打开,然后再打开redis-cli.exe,注意此时两个窗口都应该打开,可以简单输入一个指令  keys *  来检测是否正常

简单配置

修改端口

在redis.windows.conf中

image.gif 编辑

修改port 后的值,可以改变redis-server的监听端口

设置密码

依旧在redis.windows.conf中

image.gif 编辑

将386行的注释去掉,然后修改 requirepass 后的值,将foobared修改为你的密码,然后重启redis-server即可

注意

如果想让redis读取conf文件,就要在命令行中输入  

redis-server.exe redis.windows.conf

指令,来明确redis-server指定的配置文件

同时,redis-cli的打开方式也应该为命令行中输入

redis-cli.exe -h localhost -p 9999 -a foobared

来指定ip(可选)以及端口,其中 -h 用与指定ip, -p用于指定端口,你应该修改为你的实际ip以及端口。

使用

String

设置值:使用SET命令可以设置键的值。如果键已经存在,SET命令会更新键的值。如果键不存在,SET命令会创建一个新键。

SET key value

获取值:使用GET命令可以获取键的值。

GET key

获取值的长度:使用STRLEN命令可以获取字符串值的长度。

STRLEN key

追加值:使用APPEND命令可以在现有值的末尾追加字符串。

APPEND key value

自增/自减:使用INCR和DECR命令可以对整数值进行递增和递减操作。

INCR key

DECR key

设置并返回旧值:使用GETSET命令可以设置键的新值,并返回旧值。

GETSET key newvalue

批量设置/获取:使用MSET和MGET命令可以一次性设置或获取多个键值对。

MSET key1 value1 key2 value2 ...

MGET key1 key2 ..

设置值并设置过期时间:使用SETEX命令可以设置键的值,并指定键的过期时间(以秒为单位)。

SETEX key seconds value

设置值仅当键不存在:使用SETNX命令可以设置键的值,但仅当键不存在时。如果键已存在,则SETNX命令不会执行任何操作。

SETNX key value

字符串的子串操作:使用GETRANGE命令可以获取字符串的子串。

GETRANGE key start stop

设置字符串的子串:使用SETRANGE命令可以设置字符串的子串。

SETRANGE key offset value

示例

image.gif 编辑

List

在列表左端插入元素:使用LPUSH命令将一个或多个值插入到列表的左边。如果键不存在,则创建一个空列表,然后进行LPUSH操作。

LPUSH key value1 [value2 ...]

在列表右端插入元素:使用RPUSH命令将一个或多个值插入到列表的右边。

RPUSH key value1 [value2 ...]

移除并获取列表左端的元素:使用LPOP命令移除并返回列表的左端元素。如果列表没有元素,则返回nil。

LPOP key

移除并获取列表右端的元素:使用RPOP命令移除并返回列表的右端元素。

RPOP key

获取列表长度:使用LLEN命令获取列表的长度。

LLEN key

获取列表指定范围的元素:使用LRANGE命令获取列表指定范围内的元素。范围可以通过起始索引和结束索引指定,索引从0开始,也可以是负数表示从列表尾部开始。

LRANGE key start stop

lrange key 0 -1 可以显示key列表的全部元素

移除列表中的元素:使用LREM命令移除列表中指定数量的指定值。

LREM key count value

修剪列表:使用LTRIM命令修剪列表,使其只保留指定范围内的元素。

LTRIM key start stop

获取列表指定索引位置的元素:使用LINDEX命令获取列表中指定索引位置的元素。

LINDEX key index

在列表指定位置前或后插入元素:使用LINSERT命令在列表的指定元素前或后插入一个新元素。

LINSERT key BEFORE|AFTER pivot value

将列表中的一个元素移动到另一个列表:使用RPOPLPUSH命令将源列表的右端元素弹出,并插入到目标列表的左端。

RPOPLPUSH source destination

示例

image.gif 编辑

image.gif 编辑

Set

添加元素:使用SADD命令向集合中添加一个或多个元素。如果元素已存在于集合中,则添加操作将忽略该元素。

SADD key member1 [member2 ...]

移除元素:使用SREM命令从集合中移除一个或多个元素。如果元素不存在于集合中,则移除操作将被忽略。

SREM key member1 [member2 ...]

获取集合的所有元素:使用SMEMBERS命令获取集合中的所有元素。

SMEMBERS key

判断元素是否存在于集合中:使用SISMEMBER命令判断指定元素是否存在于集合中。如果元素存在,则返回1;否则返回0。

SISMEMBER key member

获取集合的元素个数:使用SCARD命令获取集合中元素的个数。

SCARD key

随机获取集合中的一个元素:使用SRANDMEMBER命令随机获取集合中的一个元素。如果指定了count参数并且为正数,则返回count个随机元素(不重复)。如果count参数为负数,则返回count个随机元素(允许重复)。

SRANDMEMBER key [count]

从集合中随机移除并返回一个元素:使用SPOP命令随机移除并返回集合中的一个元素。如果集合为空,则返回nil。

SPOP key

集合的交集、并集和差集

  • 使用SINTER命令获取多个集合的交集。
  • 使用SUNION命令获取多个集合的并集。
  • 使用SDIFF命令获取第一个集合相对于其他集合的差集。

SINTER key1 [key2 ...]

SUNION key1 [key2 ...]

SDIFF key1 [key2 ...]

将集合中的元素移动到另一个集合:使用SMOVE命令将源集合中的一个元素移动到目标集合中。如果目标集合已包含该元素,则SMOVE命令只是简单地从源集合中删除该元素。

SMOVE source destination member

示例

image.gif 编辑

image.gif 编辑

zSet

Redis的zSet(有序集合)数据类型提供了一系列的操作,这些操作允许你添加、删除、查找、更新和排序集合中的元素。有序集合与普通集合的主要区别在于每个元素都会关联一个分数(score),这个分数用于在集合中对元素进行排序。

添加元素:使用ZADD命令向有序集合中添加一个或多个元素,每个元素都关联一个分数。如果元素已存在,则更新其分数。

ZADD key score1 member1 [score2 member2 ...]

获取集合的元素个数:使用ZCARD命令获取有序集合中元素的个数。

ZCARD key

获取指定分数范围的元素:使用ZRANGE命令获取有序集合中指定分数范围内的元素。默认情况下,元素按分数从低到高排序。

ZRANGE key start stop [WITHSCORES]

获取指定排名范围的元素:使用ZREVRANGE命令获取有序集合中指定排名范围内的元素。默认情况下,元素按分数从高到低排序。

ZREVRANGE key start stop [WITHSCORES]

删除元素:使用ZREM命令从有序集合中删除一个或多个元素。

ZREM key member1 [member2 ...]

获取元素的分数:使用ZSCORE命令获取有序集合中指定元素的分数。

ZSCORE key member

增加或减少元素的分数:使用ZINCRBY命令增加或减少有序集合中指定元素的分数。

ZINCRBY key increment member

获取指定分数范围的元素个数:使用ZCOUNT命令获取有序集合中指定分数范围内的元素个数。

ZCOUNT key min max

获取元素的逆排名:使用ZREVRANK命令获取有序集合中指定元素的排名(按分数从高到低)。

ZREVRANK key member

获取分数最高的元素:使用ZREVRANGE命令获取有序集合中分数最高的元素。

ZREVRANGE key 0 0

获取分数最低的元素:使用ZRANGE命令获取有序集合中分数最低的元素。

ZRANGE key 0 0

返回指定分数范围内的元素:使用ZRANGEBYSCOREZREVRANGEBYSCORE命令可以移除并返回指定分数范围内的元素。

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

示例

image.gif 编辑

Hash

添加或更新字段:使用HSET命令向hash表中添加一个或多个字段及其值。如果字段已存在,则更新其值。

HSET key field value [field value ...]

获取字段值:使用HGET命令获取存储在hash表中指定字段的值。

HGET key field

获取所有字段和值:使用HGETALL命令获取hash表中指定key的所有字段和值。

HGETALL key

获取所有字段:使用HKEYS命令获取hash表中所有字段的名称。

HKEYS key

获取所有值:使用HVALS命令获取hash表中所有字段的值。

HVALS key

获取字段数量:使用HLEN命令获取hash表中字段的数量。

HLEN key

判断字段是否存在:使用HEXISTS命令查看hash表key中指定的字段是否存在。

HEXISTS key field

删除字段:使用HDEL命令删除hash表中的一个或多个字段。

HDEL key field [field ...]

只在字段不存在时设置字段值:使用HSETNX命令设置hash表的字段值,但仅当字段不存在时。

HSETNX key field value

示例

image.gif 编辑

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
15天前
|
缓存 NoSQL Redis
Redis雪崩问题
Redis雪崩问题
34 1
|
8月前
|
JSON NoSQL Redis
|
15天前
|
存储 NoSQL 关系型数据库
【初识Redis】
【初识Redis】
24 2
|
7月前
|
存储 NoSQL Linux
Redis之Redis为什么这么快解读
Redis之Redis为什么这么快解读
|
9月前
|
运维 NoSQL Shell
redis-2
redis-2
53 0
|
11月前
|
NoSQL 安全 Unix
Redis (必看)
Redis 学习点滴 知识分享
65 0
|
11月前
|
NoSQL Redis 数据库
|
消息中间件 缓存 NoSQL
Redis还可以做哪些事?
Redis还可以做哪些事?
81 0
|
存储 消息中间件 缓存
Redis总结(二)
redis 和 memcached 什么区别?为什么高并发下有时单线程的 redis 比多线程的memcached 效率要高?区别:1.mc 可缓存图片和视频。rd 支持除 k/v 更多的数据结构;2.rd 可以使用虚拟内存,rd 可持久化和 aof 灾难恢复,rd 通过主从支持数据备份;3.rd 可以做消息队列。原因:mc 多线程模型引入了缓存一致性和锁,加锁带来了性能损耗。redis 主从复制如何实现的?redis 的集群模式如何实现?redis 的 key 是如何寻址的?
90 0
|
存储 缓存 NoSQL
redis 问答
redis 问答
95 0
redis 问答