`
phipray
  • 浏览: 65809 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Redis相关知识

 
阅读更多

Redis常用命令

 

原子性增长:

 

 

> set counter 100  
OK  
> incr counter  
(integer) 101  
> incr counter  
(integer) 102  
> incrby counter 50  
(integer) 152  
  

 

 

在一个命令中一次设置或者检索多个键有利于减少延迟。为此有了MSETMGET命令:

 

 

> mset a 10 b 20 c 30  
OK  
> mget a b c  
1) "10"  
2) "20"  
3) "30"  
 

 

 

DEL命令删除键及其关联的值

 

 

> set mykey hello  
OK  
> exists mykey  
(integer) 1  
> del mykey  
(integer) 1  
> exists mykey  
(integer) 0  
 

 

 

设置key的保存期expire

 

 

> set key some-value  
OK  
> expire key 5  
(integer) 1  
> get key (immediately)  
"some-value"  
> get key (after some time)  
(nil)  
 

 

TTL命令检查键的生存剩余时间

 

 

> set key 100 ex 10  
OK  
> ttl key  
(integer) 9  
 

 

Redis列表

 LPUSH命令从左边(头部)添加一个元素到列表,RPUSH命令从右边(尾部)添加一个元素的列表。LRANGE命令从列表中提取一个范围内的元素。

 

 

> rpush mylist A  
(integer) 1  
> rpush mylist B  
(integer) 2  
> lpush mylist first  
(integer) 3  
> lrange mylist 0 -1  
1) "first"  
2) "A"  
3) "B"  
 

 

注意LRANGE命令使用两个索引下标,分别是返回的范围的开始和结束元素。两个索引坐标可以是负数,表示从后往前数,所以-1表示最后一个元素,-2表示倒数第二个元素,等等。 
   
如你所见,RPUSH添加元素到列表的右边,LPUSH添加元素到列表的左边。 
   
两个命令都是可变参数命令,也就是说,你可以在一个命令调用中自由的添加多个元素到列表中:

 

 

> rpush mylist 1 2 3 4 5 "foo bar"  
(integer) 9  
> lrange mylist 0 -1  
1) "first"  
2) "A"  
3) "B"  
4) "1"  
5) "2"  
6) "3"  
7) "4"  
8) "5"  
9) "foo bar"  
 

 

 定义在Redis列表上的一个重要操作是弹出元素。弹出元素指的是从列表中检索元素,并同时将其从列表中清楚的操作。你可以从左边或者右边弹出元素,类似于你可以从列表的两端添加元素。 

 

 

> rpush mylist a b c  
(integer) 3  
> rpop mylist  
"c"  
> rpop mylist  
"b"  
> rpop mylist  
"a"  
 

 

Lpushrpushlpoprpop灵活运用就能使redis-list变成队列或者盏

 

  列表的阻塞操作(blocking) 
   
列表有一个特别的特性使得其适合实现队列,通常作为进程间通信系统的积木:阻塞操作。 
   
假设你想往一个进程的列表中添加项,用另一个进程来处理这些项。这就是通常的生产者消费者模式,可以使用以下简单方式实现: 
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

<!--[if !supportLists]-->·                       <!--[endif]-->生产者调用LPUSH添加项到列表中。

<!--[if !supportLists]-->·                       <!--[endif]-->消费者调用RPOP从列表提取/处理项。

 

 然而有时候列表是空的,没有需要处理的,RPOP就返回NULL。所以消费者被强制等待一段时间并重试RPOP命令。这称为轮询 (polling),由于其具有一些缺点,所以不合适在这种情况下: 
    1.
强制Redis和客户端处理无用的命令(当列表为空时的所有请求都没有执行实际的工作,只会返回NULL) 
    2.
由于工作者受到一个NULL后会等待一段时间,这会延迟对项的处理。 
   
于是Redis实现了BRPOPBLPOP两个命令,它们是当列表为空时RPOPLPOP的会阻塞版本:仅当一个新元素被添加到列表时,或者到达了用户的指定超时时间,才返回给调用者。 
这个是我们在工作者中调用BRPOP的例子: 

 

 

> brpop tasks 5  
1) "tasks"  
2) "do_something" 
 

 

 

上面的意思是等待tasks列表中的元素,如果5秒后还没有可用元素就返回 
   
注意,你可以使用0作为超时让其一直等待元素,你也可以指定多个列表而不仅仅只是一个,同时等待多个列表,当第一个列表收到元素后就能得到通知。 
   
关于BRPOP的一些注意事项。 
    1.
客户端按顺序服务:第一个被阻塞等待列表的客户端,将第一个收到其他客户端添加的元素,等等。 
    2.
RPOP的返回值不同:返回的是一个数组,其中包括键的名字,因为BRPOPBLPOP可以阻塞等待多个列表的元素。 
    3.
如果超时时间到达,返回NULL 
   
还有更多你需要知道的关于列表和阻塞选项,建议你阅读下面的页面: 
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

<!--[if !supportLists]-->·                       <!--[endif]-->使用RPOLPUSH构建更安全的队列和旋转队列。

<!--[if !supportLists]-->·                       <!--[endif]-->BRPOPLPUSH命令是其阻塞变种命令。

当所有元素弹出后,键就不存在了。 

相当适合用来做资源池来管理资源

 

Redis集合(Sets) 
    Redis
集合是无序的字符串集合(collections)SADD命令添加元素到集合。还可以对集合执行很多其他的操作,例如,测试元素是否存在,对多个集合执行交集、并集和差集,等等。

 

 

> sadd myset 1 2 3  
(integer) 3  
> smembers myset  
1. 3  
2. 1  
3. 2  

> sismember myset 3  
(integer) 1  
> sismember myset 30  
(integer) 0 
 

 

字典分数(Lexicographical scores) 
   
最近的Redis2.8版本引入了一个新的特性,假定集合中的元素都具有相同的分数,允许按字典顺序获取范围(元素按照C语言中的memcmp函数进行比较,因此可以保证没有整理,每个Redis实例会有相同的输出) 
   
操作字典顺序范围的主要命令是ZRANGEBYLEXZREVRANGEBYLEXZREMRANGEBYLEXZLEXCOUNT。例如,我们再次添加我们的著名黑客清单。但是这次为每个元素使用0分数:

 

 

> zadd hackers 0 "Alan Kay" 0 "Sophie Wilson" 0 "Richard Stallman" 0  
"Anita Borg" 0 "Yukihiro Matsumoto" 0 "Hedy Lamarr" 0 "Claude Shannon"  
 0 "Linus Torvalds" 0 "Alan Turing" 
 

 

 根据有序集合的排序规则,他们已经按照字典顺序排好了:

 

 

> zrange hackers 0 -1  
1) "Alan Kay"  
2) "Alan Turing"  
3) "Anita Borg"  
4) "Claude Shannon"  
5) "Hedy Lamarr"  
6) "Linus Torvalds"  
7) "Richard Stallman"  
8) "Sophie Wilson"  
9) "Yukihiro Matsumoto"  

 

 

 使用ZRANGEBYLEX我们可以查询字典顺序范围:

 

> zrangebylex hackers [B [P  
1) "Claude Shannon"  
2) "Hedy Lamarr"  
3) "Linus Torvalds"

 

NoSql特性

分享到:
评论

相关推荐

    redis基础知识培训

    本文档从redis基础知识,复制模式,集群模式等介绍redis基础知识,介绍了数据槽,分片,key等知识。

    redis相关知识,安装流程,Java调用

    本文将深入探讨Redis的相关知识,包括其安装流程以及如何使用Java进行调用。 一、Redis简介 Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,可以作为数据库、缓存和消息代理使用。它支持多种数据结构,...

    Redis底层知识分享

    Redis底层知识分享,参考书籍:Redis5.0.0源码和《Redis原理与设计》

    Redis面试知识点.pdf

    #### 28、Redis事务相关的命令有哪几个? - `MULTI`:开启一个事务块。 - `EXEC`:执行所有事务块内的命令。 - `DISCARD`:取消当前事务块。 - `WATCH`:监视一个或多个键。 #### 29、Rediskey的过期时间和永久...

    redis的相关知识讲解,及相关配置

    ### Redis相关知识讲解及相关配置 #### 一、Redis简介与特点 Redis(Remote Dictionary Server)是一种开源的键值存储系统,被广泛应用于高速缓存、消息队列等场景。其支持多种数据结构如字符串(strings)、哈希...

    Redis相关学习资料

    以下是对Redis相关知识点的详细解释: 1. **Redis的基本概念** - **键(Key)**:Redis中的数据是以键值对的形式存在的,键是唯一的标识符。 - **值(Value)**:值可以是字符串、列表、集合、哈希表或有序集合等...

    面试突击班3.4redis知识讲解.zip

    以下是对Redis相关知识点的详细讲解: 一、Redis基本概念 1. 数据结构:Redis支持多种数据类型,如字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。每种数据类型都有其独特的应用场景。...

    redis相关安装包.zip

    在本文中,我们将详细探讨Redis 5.0版本的相关知识点,包括其新特性、安装过程、配置优化以及常见操作。 首先,Redis 5.0引入了一个重要的新特性——Stream数据结构。Stream是Redis提供的一个复杂且灵活的日志数据...

    Redis部分知识点11

    Redis部分知识点11

    Redis核心知识点总结

    Redis核心知识点总结

    redis基础知识-参考

    Redis 基础知识 Redis 是一个基于 key-value 键值的持久化数据库存储系统。它支持的数据存储类型更丰富,并且持久化存储,还支持主从同步,这点类似于 MySQL。Redis 的应用场景非常广泛,以下是 Redis 的基础知识点...

    redis整合知识点新手编制

    redis整合知识点新手编制

    《Redis设计与实现》知识图谱

    对《Redis设计与实现》一书中的知识点进行全面的整理,让大家对Redis的整体架构以及其知识点有更为全面的认知

    redis知识思维导图

    redis知识思维导图r

    Redis面试常考知识点

    ### Redis面试常考知识点 #### 一、Redis简介与特性 **Redis**(Remote Dictionary Server)是一种开源的、基于内存的、支持多种数据结构的键值(Key-Value)存储系统。由于它主要依赖内存进行数据存储,因此读写...

    redis知识总结.xmind

    Redis技术栈 xmind格式 很适合新手上手看一下。 笔者自己总结

    Redis基础知识详解

    ### Redis基础知识详解 #### 一、NoSQL概述 ##### 1.1 什么是NoSQL? NoSQL,全称为Not Only SQL,是指一类非关系型数据库管理系统。与传统的SQL(Structured Query Language)数据库不同,NoSQL数据库更加注重...

    程序员Redis基础知识

    学习 Redis 可以帮助你构建更快、更可靠、更可扩展的应用程序,同时也为你的职业生涯增加价值。 1.Redis 是一个高性能的键值存储系统,它可以用作数据库、缓存或消息传递系统,从而提高应用程序的响应速度和处理能力...

    程序员Redis集群知识

    学习 Redis 可以帮助你构建更快、更可靠、更可扩展的应用程序,同时也为你的职业生涯增加价值。 1.Redis 是一个高性能的键值存储系统,它可以用作数据库、缓存或消息传递系统,从而提高应用程序的响应速度和处理能力...

Global site tag (gtag.js) - Google Analytics