- 浏览: 2654760 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
一、概述:
在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存
在等操作。需要说明的是,这些操作的时间复杂度为O(1),即常量时间内完成次操作。Set可包含的最大元素数量是4294967295。
和List类型不同的是,Set集合中不允许出现重复的元素,这一点和C++标准库中的set容器是完全相同的。换句话说,如果多次添加相同元素,Set
中将仅保留该元素的一份拷贝。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如
unions、intersections和differences。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。
二、相关命令列表:
命令原型 | 时间复杂度 | 命令描述 | 返回值 |
SADD key member [member ...] | O(N) | 时间复杂度中的N表示操作的成员数量。如果在插入的过程用,参数中有的成员在 Set中已经存在,该成员将被忽略,而其它成员仍将会被正常插入。如果执行该命令之前,该Key并不存在,该命令将会创建一个新的Set,此后再将参数中 的成员陆续插入。如果该Key的Value不是Set类型,该命令将返回相关的错误信息。 | 本次操作实际插入的成员数量。 |
SCARD key | O(1) | 获取Set中成员的数量。 | 返回Set中成员的数量,如果该Key并不存在,返回0。 |
SISMEMBER key member | O(1) | 判断参数中指定成员是否已经存在于与Key相关联的Set集合中。 | 1表示已经存在,0表示不存在,或该Key本身并不存在。 |
SMEMBERS key | O(N) | 时间复杂度中的N表示Set中已经存在的成员数量。获取与该Key关联的Set中所有的成员。 |
返回Set中所有的成员。 |
SPOP key | O(1) | 随机的移除并返回Set中的某一成员。 由于Set中元素的布局不受外部控制,因此无法像List那样确定哪个元素位于Set的头部或者尾部。 | 返回移除的成员,如果该Key并不存在,则返回nil。 |
SREM key member [member ...] | O(N) | 时间复杂度中的N表示被删除的成员数量。从与Key关联的Set中删除参数中指定的成员,不存在的参数成员将被忽略,如果该Key并不存在,将视为空Set处理。 | 从Set中实际移除的成员数量,如果没有则返回0。 |
SRANDMEMBER key | O(1) | 和SPOP一样,随机的返回Set中的一个成员,不同的是该命令并不会删除返回的成员。 | 返回随机位置的成员,如果Key不存在则返回nil。 |
SMOVE source destination member | O(1) | 原子性的将参数中的成员从source键移入到destination键所关联的 Set中。因此在某一时刻,该成员或者出现在source中,或者出现在destination中。如果该成员在source中并不存在,该命令将不会再 执行任何操作并返回0,否则,该成员将从source移入到destination。如果此时该成员已经在destination中存在,那么该命令仅是 将该成员从source中移出。如果和Key关联的Value不是Set,将返回相关的错误信息。 | 1表示正常移动,0表示source中并不包含参数成员。 |
SDIFF key [key ...] | O(N) | 时间复杂度中的N表示所有Sets中成员的总数量。返回参数中第一个Key所关联的Set和其后所有Keys所关联的Sets中成员的差异。如果Key不存在,则视为空Set。 | 差异结果成员的集合。 |
SDIFFSTORE destination key [key ...] | O(N) | 该命令和SDIFF命令在功能上完全相同,两者之间唯一的差别是SDIFF返回差异的结果成员,而该命令将差异成员存储在destination关联的Set中。如果destination键已经存在,该操作将覆盖它的成员。 | 返回差异成员的数量。 |
SINTER key [key ...] | O(N*M) | 时间复杂度中的N表示最小Set中元素的数量,M则表示参数中Sets的数量。该命令将返回参数中所有Keys关联的Sets中成员的交集。因此如果参数中任何一个Key关联的Set为空,或某一Key不存在,那么该命令的结果将为空集。 | 交集结果成员的集合。 |
SINTERSTORE destination key [key ...] | O(N*M) | 该命令和SINTER命令在功能上完全相同,两者之间唯一的差别是SINTER返回交集的结果成员,而该命令将交集成员存储在destination关联的Set中。如果destination键已经存在,该操作将覆盖它的成员。 | 返回交集成员的数量。 |
SUNION key [key ...] | O(N) | 时间复杂度中的N表示所有Sets中成员的总数量。该命令将返回参数中所有Keys关联的Sets中成员的并集。 | 并集结果成员的集合。 |
SUNIONSTORE destination key [key ...] | O(N) | 该命令和SUNION命令在功能上完全相同,两者之间唯一的差别是SUNION返回并集的结果成员,而该命令将并集成员存储在destination关联的Set中。如果destination键已经存在,该操作将覆盖它的成员。 | 返回并集成员的数量。 |
三、命令示例:
1. SADD/SMEMBERS/SCARD/SISMEMBER:
#在Shell命令行下启动Redis的客户端程序。
/> redis-cli
#插入测试数据,由于该键myset之前并不存在,因此参数中的三个成员都被正常插入。
redis 127.0.0.1:6379> sadd myset a b c
(integer) 3
#由于参数中的a在myset中已经存在,因此本次操作仅仅插入了d和e两个新成员。
redis 127.0.0.1:6379> sadd myset a d e
(integer) 2
#判断a是否已经存在,返回值为1表示存在。
redis 127.0.0.1:6379> sismember myset a
(integer) 1
#判断f是否已经存在,返回值为0表示不存在。
redis 127.0.0.1:6379> sismember myset f
(integer) 0
#通过smembers命令查看插入的结果,从结果可以,输出的顺序和插入顺序无关。
redis 127.0.0.1:6379> smembers myset
1) "c"
2) "d"
3) "a"
4) "b"
5) "e"
#获取Set集合中元素的数量。
redis 127.0.0.1:6379> scard myset
(integer) 5
2. SPOP/SREM/SRANDMEMBER/SMOVE:
#删除该键,便于后面的测试。
redis 127.0.0.1:6379> del myset
(integer) 1
#为后面的示例准备测试数据。
redis 127.0.0.1:6379> sadd myset a b c d
(integer) 4
#查看Set中成员的位置。
redis 127.0.0.1:6379> smembers myset
1) "c"
2) "d"
3) "a"
4) "b"
#从结果可以看出,该命令确实是随机的返回了某一成员。
redis 127.0.0.1:6379> srandmember myset
"c"
#Set中尾部的成员b被移出并返回,事实上b并不是之前插入的第一个或最后一个成员。
redis 127.0.0.1:6379> spop myset
"b"
#查看移出后Set的成员信息。
redis 127.0.0.1:6379> smembers myset
1) "c"
2) "d"
3) "a"
#从Set中移出a、d和f三个成员,其中f并不存在,因此只有a和d两个成员被移出,返回为2。
redis 127.0.0.1:6379> srem myset a d f
(integer) 2
#查看移出后的输出结果。
redis 127.0.0.1:6379> smembers myset
1) "c"
#为后面的smove命令准备数据。
redis 127.0.0.1:6379> sadd myset a b
(integer) 2
redis 127.0.0.1:6379> sadd myset2 c d
(integer) 2
#将a从myset移到myset2,从结果可以看出移动成功。
redis 127.0.0.1:6379> smove myset myset2 a
(integer) 1
#再次将a从myset移到myset2,由于此时a已经不是myset的成员了,因此移动失败并返回0。
redis 127.0.0.1:6379> smove myset myset2 a
(integer) 0
#分别查看myset和myset2的成员,确认移动是否真的成功。
redis 127.0.0.1:6379> smembers myset
1) "b"
redis 127.0.0.1:6379> smembers myset2
1) "c"
2) "d"
3) "a"
3. SDIFF/SDIFFSTORE/SINTER/SINTERSTORE:
#为后面的命令准备测试数据。
redis 127.0.0.1:6379> sadd myset a b c d
(integer) 4
redis 127.0.0.1:6379> sadd myset2 c
(integer) 1
redis 127.0.0.1:6379> sadd myset3 a c e
(integer) 3
#myset和myset2相比,a、b和d三个成员是两者之间的差异成员。再用这个结果继续和myset3进行差异比较,b和d是myset3不存在的成员。
redis 127.0.0.1:6379> sdiff myset myset2 myset3
1) "d"
2) "b"
#将3个集合的差异成员存在在diffkey关联的Set中,并返回插入的成员数量。
redis 127.0.0.1:6379> sdiffstore diffkey myset myset2 myset3
(integer) 2
#查看一下sdiffstore的操作结果。
redis 127.0.0.1:6379> smembers diffkey
1) "d"
2) "b"
#从之前准备的数据就可以看出,这三个Set的成员交集只有c。
redis 127.0.0.1:6379> sinter myset myset2 myset3
1) "c"
#将3个集合中的交集成员存储到与interkey关联的Set中,并返回交集成员的数量。
redis 127.0.0.1:6379> sinterstore interkey myset myset2 myset3
(integer) 1
#查看一下sinterstore的操作结果。
redis 127.0.0.1:6379> smembers interkey
1) "c"
#获取3个集合中的成员的并集。
redis 127.0.0.1:6379> sunion myset myset2 myset3
1) "b"
2) "c"
3) "d"
4) "e"
5) "a"
#将3个集合中成员的并集存储到unionkey关联的set中,并返回并集成员的数量。
redis 127.0.0.1:6379> sunionstore unionkey myset myset2 myset3
(integer) 5
#查看一下suiionstore的操作结果。
redis 127.0.0.1:6379> smembers unionkey
1) "b"
2) "c"
3) "d"
4) "e"
5) "a"
四、应用范围:
1). 可以使用Redis的Set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。对于此场景,我们仅需在每次访问该博客时将访问者的IP存入Redis中,Set数据类型会自动保证IP地址的唯一性。
2).
充分利用Set类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户ID被存储在一个指定的
Set中,而购买另外一种电子产品的客户ID被存储在另外一个Set中,如果此时我们想获取有哪些客户同时购买了这两种商品时,Set的
intersections命令就可以充分发挥它的方便和效率的优势了。
发表评论
-
新浪微博 Redis 实战经验分享
2014-02-07 13:36 832Tape is Dead,Disk is Tape,Flas ... -
redis常用使用场景
2013-02-20 14:14 18081.将Redis用作消息队列 采用的当然是Redis的Li ... -
redis数据持久化的策略
2012-12-22 16:22 948redis数据持久化的策略 ... -
redis 文档集合
2012-12-22 15:52 774由于xmemcached不是很给力,最近想把memcach ... -
redis 重启主意事项
2012-12-18 13:07 21801. 先info 命令查看db0和db1的占用情况,然后确保c ... -
redis expires key不会自动删除的问题
2012-12-18 12:06 8875最近发现线上的session 服务器每隔一段时间内存占用就达到 ... -
redis 安装 配置解析
2012-12-18 11:51 1110一、 下载安装 Wget http://redis ... -
redis 挂掉
2012-09-18 17:12 1871线上报错: [25136] 18 Sep 16:24:38 ... -
Redis学习笔记II-Working with Multiple Databases
2012-09-09 20:35 731翻译自:http://rediscookbook.org/mu ... -
python reids client
2012-09-06 00:02 85201. 安装 1. redis-py git clone ... -
Redis学习手册(Sorted-Sets数据类型)
2012-09-07 16:36 1026一、概述: Sorted-S ... -
redis 适用场景与实现
2012-09-05 16:23 1290redis 127.0.0.1:6379> za ... -
Redis学习手册(String数据类型)
2012-09-05 16:05 1116一、概述: ... -
Redis学习手册(List数据类型)
2012-09-05 16:02 899参考:http://www.cnblogs.com/ste ... -
Redis学习手册(Hashes数据类型)
2012-09-05 16:03 1028一、概述: 我们可以将Red ... -
Redis学习手册(内存优化)
2012-09-05 16:04 933一、特殊编码: 自从Redis 2.2之 ...
相关推荐
Redis学习手册 Set数据类型 doc Redis学习手册 Sorted Sets数据类型 doc Redis学习手册 String数据类型 doc Redis学习手册 主从复制 doc Redis学习手册 事务 doc Redis学习资料 rar redis讲义 doc">redis 2 8 13 tar...
Redis学习手册带详细教程 一、Redis概述 Redis是当前最流行的NoSQL数据库之一,它是一个开源的、基于内存的数据存储系统,可以用作数据库、消息队列、缓存等。Redis的主要特点是高性能、低延迟、支持事务、支持...
Redis是一个开源的使用ANSI C编写的高性能键值对数据库,通常被称为数据结构服务器。它被广泛用于构建高性能的web应用、缓存、消息队列等场景。PHPRedis是Redis的一个PHP扩展模块,提供了丰富的API接口用于与Redis...
1. **字符串(Strings)**:Redis中的基本数据类型,可以存储任何可打印的ASCII字符序列,常用于存储简单的键值对。 2. **哈希(Hashes)**:哈希类型允许你将单个键映射到一个字段-值对的集合,非常适合存储对象。 3....
在数据类型方面,Redis提供了五种主要的数据结构:字符串(string)、列表(list)、集合(set)、有序集合(sorted set)和散列(hash)。其中,字符串类型是其最基本的存储结构,而其它四种则提供了更为复杂的数据...
数据类型操作 - **字符串(Strings)**:通过`set()`, `get()`, `append()`等函数操作单个键值。 - **哈希(Hashes)**:使用`hSet()`, `hGet()`, `hMSet()`, `hMGet()`等处理键值对集合。 - **列表(Lists)**:利用`...
Redis 命令手册介绍了 Redis 常用键命令和数据类型命令,是目前最全的 Redis 命令手册。 在Redis命令手册中,你可以找到关于常用键命令的详细说明,如SET、GET、DEL等命令,它们用于操作和管理键值对数据。这些命令...
Redis作为一个开源的NoSQL数据库,以其内存数据结构存储、支持多种数据类型、丰富的操作命令和网络协议而闻名。它以键值对的形式存储数据,键可以是字符串,值则可以是字符串、列表、集合、有序集合或哈希表等多种...
2. **基本数据类型**:深入理解Redis中的五大数据类型:字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets)。了解它们的使用场景和操作命令,如`SET`、`GET`、`HSET`、`LPOP`、`SADD`...
字符串是最基础的数据类型,`SET`、`SETNX`、`SETEX` 和 `GET` 等命令用于设置和获取字符串值。`SET` 设置键值,`SETNX` 只在键不存在时设置,`SETEX` 同时设置过期时间。例如: ```php $redis->set('key', 'value')...
Redis提供了丰富的命令,如`SET`、`GET`、`INCR`、`HSET`、`LPOP`、`SADD`、`ZADD`等,用于操作上述数据类型。此外,还有`EXPIRE`用于设置键的过期时间,`PUBSUB`用于发布/订阅消息。 五、持久化 1. RDB:定期保存...
Redis支持五种基本数据类型:字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。这些数据类型为各种应用场景提供了灵活性和高效性。 1. 字符串(String):最基础的数据类型,...
对于每个数据类型,书中都会详细解释其工作原理、使用方法以及相关的命令,如SET和GET用于操作字符串,HSET和HGET用于哈希表,LPUSH和RPOP用于列表,SADD和SMEMBERS用于集合,ZADD和ZRANGE用于有序集合。 接下来,...
Redis是一个开源的高性能键值对数据库,...综上所述,Redis实战手册详细介绍了Redis的数据类型、操作命令、高级特性等核心知识点,这些知识点是Redis使用者必须掌握的内容,对理解和运用Redis具有极其重要的指导意义。
2. **命令操作**:Redis提供了丰富的命令来操作这些数据类型,如`SET`、`GET`用于字符串,`HSET`、`HGET`用于哈希,`LPUSH`、`RPOP`用于列表,`SADD`、`SMEMBERS`用于集合,`ZADD`、`ZRANGE`用于有序集合。...
1. **Strings (字符串)**: 最基础的数据类型,可用于存储纯文本数据或二进制数据。 2. **Lists (列表)**: 适合用于消息队列、任务队列等场景。 3. **Sets (集合)**: 存储无序不重复元素的集合。 4. **Sorted Sets ...
### Redis命令参考手册知识点概述 #### 一、DEL 命令详解 - **命令格式**:`DEL key [key ...]` - **功能描述**: - 用于删除一个或多个给定的键。 - 如果键不存在,则不会有任何错误提示,而是简单地忽略这些键...
1. 数据类型:Redis支持五种基本数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。每种类型都有其特定的应用场景,如字符串用于存储简单值,哈希用于存储对象,列表用于...
Redis是一个开源的内存数据结构存储系统,支持多种数据类型,如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets)。这些数据类型使得Redis在处理多种应用场景时表现出色,...
1. **数据类型**: - **字符串(String)**:基本类型,可存储任何二进制安全的数据,常用于存储单个值。 - **哈希(Hash)**:存储键值对,适合表示对象或结构化数据。 - **列表(List)**:基于双端队列,可以添加、...