尝试Redis(Try Redis)

原文地址:Try Redis

Try Redis是Redis官网提供的一个在线Redis演示及简单的教学平台。在这里使用者可以学习到Redis的基础数据类型以及数据简单操作。但界面内部全部为英语,因此我在这里将其中的教程部分翻译为中文供有大家参考。

Redis被称为键值(key-value)存储,经常被作为NoSQL数据库提及。键值存储的本质 是将一些被称为(value)的数据存储在一个(key)里。数据被存储后,只有在你确切的知道这些数据被存储在哪一个(key)中的时候,你才可以将存储的数据取出。我们可以使用SET命令来存储值 “fido” 到键 “server:name”:

SET server:name "fido"

Redis将会将我们的数据永久的存储起来,所以我们稍后可以询问“我们在key server:name中存储的值是什么?”, Redis 将会回复”fido”:

GET server:name => "fido"

提示:命令后面的箭头(=>)显示命令执行的结果。

由key-value存储提供的其他通用操作包括:
DEL删除指定的键值对;
SETNX(SET-if-not-exits)只有当指定的key不存在的时候,才为这个key指定给出的值;
INCR自动递增指定key中的数字类型的值。

SET connections 10
INCR connections => 11
INCR connections => 12
DEL connections
INCR connections => 1

INCR命令有些特别。如果我们自己能够使用少量代码来完成这样的操作,为什么我们还提供了这个命令呢?毕竟像下面这些操作也是很简单的:

x = GET count
x = x + 1
SET count x

问题在于像上面这样做来递增数据只知适用于单一客户端使用同一数据的情况。看看如果二个客户端在同一时间使用同一个key会发生什么吧:

  1. 客户端A读取count的值为10;
  2. 客户端B读取count的值为10;
  3. 客户端A对10进行递增操作并设置count为11;
  4. 客户端B对10进行递增操作并设置count为11。

我们希望这里的值是12, 但是count的值确是11!这是因为对值进行递增的操作并不是原子级(atomic)操作。在Redis中调用INCR命令将会避免这种情况发生,因为该操作为原子级操作。Redis提供了针对不用数据类型的为数众多的原子级操作。
Redis可以被告知一个key可以存活多长时间,使用EXPIRETTL命令就可以实现该操作。

SET resource:lock "Redis Demo"
EXPIRE resouce:lock 120

这样操作keyresource:lock将会在120秒之后被删除。你可以使用TTL命令来测试一个key还可以存在多长时间。该命令会返回还剩多少秒删除指定的key。

TTL resource:lock => 113
//after 113s
TTL resource:lock => -2

TTL执行结果为-2表示指定的key已经不存在了。TTL执行结果为-1表示该key将永远不会过期。需要注意的是,如果你使用SET命令设置一个key, 该key的TTL将被重置。

SET resource:lock "Redis Demo 1"
EXPIRE resource:lock 120
TTL resource:lock => 119
SET resource:lock "Redis Demo 2"
TTL resource:lock => -1

此外,Redis还支持多种复杂的数据结构。首先我们将要看到的是列表(list)。一个列表由一系列有序的值组成。与列表有关的重要的交互命令有:RPUSH, ‘LPUSH’, ‘LLEN’, ‘LRANGE’, ‘LPOP’和’RPOP’。作为一个现在还并不存在的不同的类型的值 ,你能马上开始为一个key指定一个列表类型的值。
RPUSH 将一个新的值放到列表的最后:

RPUSH friends "Alice"
RPUSH friends "Bob"

LPUSH 将一个新的值放到列表的最前面:

LPUSH friends "Sam"

LRANGE提供一个列表的子集。该命令需要指定你想要取出的第一个元素的索引值作为第一个参数,指定你想要取出的最后个元素的索引值作为第二个参数。第二个参数如果是-1表示将一直取值到列表的最后一个元素。

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"

LLEN 返回当前列表的长度:

LLEN friends => 3

LPOP 将会返回列表的第一个元素,并将其从列表中删除。

LPOP friends => "Sam"

RPOP 将会返回列表的最后一个元素,并将其从列表中删除。

RPOP friends => "Bob"

注意现在列表中只剩一个元素了:

LLEN friends => 1
LRANGE friends 0 -1 => 1) "Alice"

我们将要看到的下一个数据结构是集合(set)。集合与列表很相似,但是集合中的元素是无序的,并且每个元素只出现一次。与集合相关的重要命令有:SADD, SREM, SISMEMBER, SMEMBERSSUNION

SADD 向集合中添加一个值:

SADD superpowers "flight"
SADD superpowers "x-ray vision"
SADD superpowers "reflexes"

SREM 从集合中删除指定的值:

SREM superpowers "reflexes"

SISMEMBER 用来测试指定的值是否在集合中。如果存在返回1,否则返回0:

SISMEMBER superpowers "flight" => 1
SISMEMBER superpowers "reflexes" => 0

SMEMBERS 以列表形式返回集合中的所有元素:

SMEMBERS superpowers => 1) "flight", 2) "x-ray vision"

SUNION 将一个或多个集体组合起来,返回包含所有元素的列表:

SADD birdpowers "pecking"
SADD birdpowers "flight"
SUNION superpowers birdpowers => 1) "pecking", 2) "x-ray vision", 3) "flight"

集合是一个非常好用的数据类型,但是因为集合中的元素是无序的,因此集合在处理元素排序问题上还存在不少问题。这就是为什么Redis 1.2引入了有序集合(Sorted Sets)的原因。

一个有序集合与普通集合有些类似,但有序集合的每个元素存在一个相关性的分数。这个分数将被用来对集合中的元素进行排序。

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"

在上面的列子中,出生年份被当作排序的分数,而集合中的数值是著名黑客的姓名。

ZRANGE hackers 2 4 => 1) "Claude Shannon", 2) "Alan Kay", 3) "Richard Stallman"

简单的字符串,集合和有序集合已经处理的非常好了。但是Redis还可以处理一种数据类型,那就是哈希(Hashes)
哈希是连接字符串字段和字符串数值之间的地图,所以哈希是用于表现对象的完美的数据类型(比如, 一个用户包含若干字段,像:姓名,别名,年龄等等):

HSET user:1000 name "John Smith"
HSET user:1000 email "john.smith@example.com"
HSET user:1000 password "s3cret"

使用HGETALL来取回已经保存的数据:

HGETALL user:1000

你也可以一次性的设置多个字段的值:

HMSET user:1001 name "Mary Jones" password "hidden" email "mjones@example.com"

如果你只需要一个单一字段的值,你也可以这样操作:

HGET user:1001 name => "Mary Jones"

哈希字段中的数字类型的值与可以向简单的字符串一样被处理,并且这些数字类型的值也可以以原子级别进行递增操作。

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

单击此处可以获得有关哈希的所有命令的列表及详细信息

到此Try Redis 也就结束了。访问下面的链接继续学习有关Redis的知识:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值