前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis教程-try.redis

redis教程-try.redis

作者头像
ccf19881030
发布2020-05-25 17:39:07
9410
发布2020-05-25 17:39:07
举报
文章被收录于专栏:ccf19881030的博客ccf19881030的博客

00

欢迎使用Try Redis,它是Redis数据库的演示! 请输入TUTORIAL以开始一个简短的教程,输入HELP以查看受支持的命令列表,或者输入任何有效的Redis命令以与数据库一起播放。

01

Redis在称为键值存储的数据库家族中。 键值存储的本质是能够在键中存储一些称为值的数据的功能,只有在我们知道用于存储它的确切键的情况下,以后才能检索此数据。 Redis通常被称为数据结构服务器,因为它具有外部键值外壳,但是每个值都可以包含复杂的数据结构,例如字符串,列表,哈希或有序数据结构(称为排序集和概率) 数据结构,例如超级日志。 作为第一个示例,我们可以使用命令SET将值“fido”存储在键“ server:name”中:

代码语言:javascript
复制
    SET server:name "fido"

Redis将永久存储我们的数据,因此我们可以稍后询问“键服务器中存储的值是什么:名称?”,Redis将以“ fido”回复:

代码语言:javascript
复制
	GET server:name => "fido"

有一个命令可以测试给定键是否存在:

代码语言:javascript
复制
	 EXISTS server:name => 1
    EXISTS server:blabla => 0

提示:您可以单击上面的命令以自动执行它们。箭头(=>)之后的文本显示预期的输出。

02

Redis提供的其他基本操作包括:DEL删除给定键和关联值,INCR原子地递增存储在给定键上的数字:

代码语言:javascript
复制
  	SET connections 10
    INCR connections => 11
    INCR connections => 12
    DEL connections
    INCR connections => 1

还可以将键中包含的数字增加特定数量:

代码语言:javascript
复制
	INCRBY connections 100 => 101

并且有类似的命令以减少键的值。

代码语言:javascript
复制
	 DECR connections => 100
     DECRBY connections 10 => 90

当使用递增和递减命令操作Redis字符串时,您正在实现计数器,计数器是Redis非常流行的应用程序。

03

INCR有一些特殊之处,如果可以用一些代码自己完成,为什么我们要提供这样的操作呢?毕竟很简单:

代码语言:javascript
复制
x = GET count
x = x + 1
SET count x

问题在于,只有一个客户端使用该键时,以这种方式进行增量操作才能正常工作。看看两个客户端同时访问此键会发生什么情况: 1.Client A reads count as 10. 2.Client B reads count as 10. 3.Client A increments 10 and sets count to 11. 4.Client B increments 10 and sets count to 11. 我们希望该值是12,但是它是11!这是因为以这种方式递增该值不是原子操作。在Redis中调用INCR命令将防止这种情况发生,因为它是原子操作。 单个命令实现的所有Redis操作都是原子性的,包括对更复杂的数据结构进行操作的操作,因此,当您使用Redis命令修改某些值时,您不必考虑并发访问。

04

可以告诉Redis键只能存在一定的时间,这可以通过EXPIRETTL命令以及类似的PEXPIREPTTL命令来实现,它们使用毫秒而不是秒来运行。

代码语言:javascript
复制
	SET resource:lock "Redis Demo"
	EXPIRE resource:lock 120

键的TTL的-2表示该键不存在(不再)。键的TTL值的-1表示该键永不过期。请注意,如果您SET了键,则其TTL将被重置。

代码语言:javascript
复制
	SET resource:lock "Redis Demo 1"
    EXPIRE resource:lock 120
    TTL resource:lock => 119
    SET resource:lock "Redis Demo 2"
    TTL resource:lock => -1

SET命令实际上能够接受其他参数,以便直接为密钥设置生存时间(TTL),因此您可以在单个原子操作中更改密钥的值并同时设置其TTL:

代码语言:javascript
复制
	SET resource:lock "Redis Demo 3" EX 5
   TTL resource:lock => 5

也可以取消键的生存时间,以删除过期并再次将其永久化。

代码语言:javascript
复制
 	SET resource:lock "Redis Demo 3" EX 5
    PERSIST resource:lock
    TTL resource:lock => -1

05

Redis还支持几种更复杂的数据结构。第一个是列表。列表是一系列有序值。与列表进行交互的一些重要命令包括RPUSHLPUSHLLENLRANGELPOP, 和RPOP。只要还不存在其他类型的键,就可以立即将其用作列表。

这个概念通常适用于每个Redis数据结构:您不必先创建键,然后再向其中添加内容,但是可以直接使用命令来添加新元素。作为副作用,将创建键 类似地,执行某些命令后将变为空的键将自动从键空间中删除。 RPUSH将新元素放到列表的末尾

代码语言:javascript
复制
    RPUSH friends "Alice"
    RPUSH friends "Bob"

LPUSH将新元素放置到列表的开头

代码语言:javascript
复制
	LPUSH friends "Sam"

06

LRANGE给出列表的一个子集,它将要检索的第一个元素的索引作为其第一个参数,并将要检索的最后一个元素的索引作为其第二个参数。第二个参数的值-1 要检索元素直到列表的末尾,-2表示最多包括倒数第二个,依此类推。

代码语言:javascript
复制
	LRANGE friends 0 -1 => 1) "Sam", 2) "Alice", 3) "Bob"
    LRANGE friends 0 1 => 1) "Sam", 2) "Alice"
    LRANGE friends 1 2 => 1) "Alice", 2) "Bob"

07

到目前为止,我们探索了使您可以向列表中添加元素的命令以及使您可以检查列表范围的LRANGE。 Redis列表的基本功能是能够删除列表开头或结尾的元素,并同时将其返回给客户端。 LPOP从列表中删除第一个元素并返回它。

代码语言:javascript
复制
	 LPOP friends => "Sam"

RPOP从列表中删除最后一个元素并返回它。

代码语言:javascript
复制
 	RPOP friends => "3"

请注意,列表现在只有四个元素:

代码语言:javascript
复制
	 LLEN friends => 4
    LRANGE friends 0 -1 => 1) "Alice" 2) "Bob" 3) "1" 4) "2"

08

其他RPUSHLPUSH命令是可变参数,因此您可以在同一命令执行中指定多个元素。

代码语言:javascript
复制
	 RPUSH friends 1 2 3 => 6

提示:RPUSH和LPUSH在操作后返回列表的总长度。 您还可以使用LLEN获取列表的当前长度。

代码语言:javascript
复制
	 LLEN friends => 6

09

我们将要看的下一个数据结构是一个集合。 集合与列表相似,不同之处在于它没有特定的顺序,每个元素只能出现一次。 这两种数据结构都非常有用,因为虽然列表中的元素可以快速访问顶部或底部附近的元素,并且元素的顺序得以保留,但在集合中可以快速测试成员资格,即立即访问 知道是否添加了给定的元素。 此外,在一个集合中,给定元素只能存在于单个副本中。

使用集合时,一些重要的命令是SADDSREMSISMEMBERSMEMBERSSUNION

SADD将给定的成员添加到集合中,该命令也是可变的。

代码语言:javascript
复制
 	SADD superpowers "flight"
    SADD superpowers "x-ray vision" "reflexes"

SREM从集合中删除给定的成员,返回1或0表示该成员是否确实存在。

代码语言:javascript
复制
	SREM superpowers "reflexes" => 1
    SREM superpowers "making pizza" => 0

10

SISMEMBER测试给定值是否在集合中。 如果该值存在,则返回1,否则返回0。

代码语言:javascript
复制
 	SISMEMBER superpowers "flight" => 1
    SISMEMBER superpowers "reflexes" => 0

SMEMBERS返回此集合的所有成员的列表。

代码语言:javascript
复制
	SMEMBERS superpowers => 1) "flight", 2) "x-ray vision"

SUNION组合两个或更多集合,并返回所有元素的列表。

代码语言:javascript
复制
	SADD birdpowers "pecking"
    SADD birdpowers "flight"
    SUNION superpowers birdpowers => 1) "pecking", 2) "x-ray vision", 3) "flight"

11

SADD的返回值与SREM的返回值一样重要。 如果我们尝试添加的元素已经在内部,则返回0,否则SADD返回1:

代码语言:javascript
复制
	SADD superpowers "flight" => 0
    SADD superpowers "invisibility" => 1

12

集合还具有与LPOP和RPOP非常相似的命令,以便从集合中提取元素并将它们通过一次操作返回给客户端。 但是,由于集合不是有序的数据结构,因此在这种情况下,返回(和删除)的元素完全是随意的。

代码语言:javascript
复制
    SADD letters a b c d e f => 6
    SPOP letters 2 => 1) "c" 2) "a"

键名称后面的SPOP参数是我们希望它返回并从集合中删除的元素数。

代码语言:javascript
复制
    SMEMBERS letters => 1) "b" 2) "d" 3) "e" 4) "f"

还有一个命令可以返回随机元素而不将其从集合中删除,这称为SRANDMEMBER。 您可以自己尝试,其参数类似于SPOP,但是如果您指定负数而不是正数,则它也可能返回重复元素。

13

集合是一种非常方便的数据类型,但是由于它们没有排序,因此对于许多问题来说效果不佳。 这就是Redis 1.2引入排序集的原因。

排序集类似于常规集,但是现在每个值都有一个关联的分数。 该分数用于对集合中的元素进行排序。

代码语言:javascript
复制
    ZADD hackers 1940 "Alan Kay"
    ZADD hackers 1906 "Grace Hopper"
    ZADD hackers 1953 "Richard Stallman"
    ZADD hackers 1965 "Yukihiro Matsumoto"
    ZADD hackers 1916 "Claude Shannon"
    ZADD hackers 1969 "Linus Torvalds"
    ZADD hackers 1957 "Sophie Wilson"
    ZADD hackers 1912 "Alan Turing"

在这些示例中,分数是出生年份,值是名称 著名的黑客。

代码语言:javascript
复制
    ZRANGE hackers 2 4 => 1) "Claude Shannon", 2) "Alan Kay", 3) "Richard Stallman"

14

简单的字符串,集合和排序集合已经完成了很多工作,但是Redis可以处理另一种数据类型:哈希。

哈希是字符串字段和字符串值之间的映射,因此它们是表示对象的理想数据类型(例如:具有多个字段(例如姓名,姓氏,年龄等)的用户):

代码语言:javascript
复制
    HSET user:1000 name "John Smith"
    HSET user:1000 email "john.smith@example.com"
    HSET user:1000 password "s3cret"

要获取保存的数据,请使用HGETALL:

代码语言:javascript
复制
    HGETALL user:1000

您也可以一次设置多个字段:

代码语言:javascript
复制
    HMSET user:1001 name "Mary Jones" password "hidden" email "mjones@example.com"

如果您只需要一个可能的单个字段值:

代码语言:javascript
复制
    HGET user:1001 name => "Mary Jones"

15

哈希字段中的数值的处理方式与简单字符串中的数值完全相同,并且存在以原子方式递增此值的操作。

代码语言:javascript
复制
    HSET user:1000 visits 10
    HINCRBY user:1000 visits 1 => 11
    HINCRBY user:1000 visits 10 => 21
    HDEL user:1000 visits
    HINCRBY user:1000 visits 1 => 1

查看哈希命令的完整列表以获取更多信息。

16

总结了Try Redis教程。 请随意使用此控制台随意操作。

查看以下链接以继续了解Redis。

参考资料

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 00
  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 参考资料
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档