一、Redis 比 Memcached 数据库最大的亮点就在于它支持的数据类型是非常多的,在 Redis 里面支持有字符串数据、hash 数据、列表(List)数据、散列集合(Set)、有序集合。
NoSQL 数据库的特点就是不使用 SQL 语句,它利用一些自己的命令来进行替换。
1、 进行数据的设置(key=test、value=java):set testjava
2、 根据 key 取得数据:get test;
3、 默认情况下可以进行内容的修改操作,此时只需要使用 set 命令就可以使用新的内容替换掉旧的内容,但是很多情况往往会出现一种判断需求,即:如果设置的 key 不存在,才进行设置,否则就不设置。
· 不覆盖设置:setnx test zookeeper;
· 如果此时设置成功返回一个数字 1(C 语言里面非 0 就是 true),如果存在返回 0(false);
4、 有效期保存:setex 138110112 10 828282;
· 此时的数据在 10 秒之内有效,超过了 10 秒之后该数据将自动销毁;
· 如果要想查看数据的有效时间,则可以使用“ttl key”的形式查看:
|- 此时如果指定的 key 存在,那么就可以取得剩余的存活时间(秒),如果该 key 已经消失了,那么返回-2;
· 如果现在突然有一个不过期操作:persist key;
5、 设置多个 key 的信息:mset test java bigdata hadoop service tomcat;
6、 不覆盖设置:msetnx test java bigdata hadoop service tomcat;
7、 追加内容:append test spring,返回的是当前的数据保存的长度;
8、 取得长度:strlen test ;
9、 删除数据:del info bigdata;
10、 自增处理:
· 保存一个数据,该数据的内容为数字:set num 10;
· 自增操作:incr num,将返回增长后的内容;
11、 默认情况下 incr 每次执行“+1”的自增,也可以自己设置:incrby num 10;
12、 自减 1 处理:decr num;
13、 自减指定的数据:decrby num 10;
二、散列类型(Hash)
Hash 是一种 key 与 value 映射的结构,在操作里面在之前保存的数据只能够是一个内容,但是如果使用了 Hash 之后保存的数据可以是一个 key 与 value 的结构。
1、 设置一个 hash 数据:hset test type1 1;
2、 取出 hash 数据:hget test type1;
3、 数据加法操作:hincrby test type1 1;
4、 默认情况下如果重名的内容会覆盖,可以使用不覆盖设置:hsetnx test type2 100;
5、 设置多个数据:hmset testjava 1-1 10 1-2 20;
6、 获取所有的 key 的信息:hmget testjava 1-1 1-2;
7、 判断某个数据是否存在:hexists testjava 1-1,存在返回 1,不存在返回 0;
8、 取得指定 key 的数量:hlen testjava;
9、 删除一个 key 的信息:hdel testjava 1-1;
10、 取得所有的 key:hkeys testjava;
11、 取得所有的内容:hvals testjava;
12、 获取所有的 key 与 value:hgetall testjava;
三、列表类型(List)
List 属于一种链表的数据类型,那么在整个的链表的处理之中主要的功能就是 push、pop。
1、 向列表中存放数据:lpush infos java;
2、 取得所有的元素(索引从 0 开始):lrange infos 0 1;
· 如果现在要想输出全部内容,则将结束索引设置为“-1”即可;
3、 通过尾部保存数据:rpush infos scal;
4、 在指定内容前追加内容:linsert infos before java oracle;
在指定的内容后追加内容:linsert infos after java cloud;
5、 修改指定索引的内容:lset infos 0 hbase;
· 最后添加在顶部的数据索引就是 0;
6、 删除数据:lrem infos 1 tomcat;
7、 删除指定范围之外的数据:ltrim infos 0 3;
8、 弹出数据:lpop infos;
9、 将弹出的数据保存到新集合:rpoplpush infos msgs;
10、 取得指定索引的数据:lindex msgs 0;
11、 取得集合的元素个数:llen msgs。
四、无序集合类型(Set)
Set 里面保存的所有的无序处理数据,有如下的操作命令 。
1、 向集合之中追加元素:sadd infos java;
2、 查询 set 集合的全部内容:smembers infos;
· 这个时候可以发现在 Set 集合之中所保存的数据都是无序的状态;
3、 删除集合元素:srem infos java;
4、 随机弹出一个元素:spop infos;
5、 返回集合差集:
6、 将差值保存在新的集合之中:sdiffstore myinfo infoa infob;
7、 交集计算:sinter infoa infob;
8、 将交集计算结果保存到新的集合之中:sinterstore myinfo2 infoa infob;
9、 并集计算(无重复):sunion infoa infob;
10、 将并集结果保存到新的集合之中:sunionstore myinfo3 infoa infob;
11、 将一个 Set 集合的删除数据保存到另外一个集合:smove infoa infob hadoop
· 从 infoa 这个集合里面删除掉 hadoop 的数据信息,而后将这个数据保存给 infob
12、 返回集合个数:scard infoa;
13、 判断集合中是否有某一元素:sismember infoa hadoop;
14、 随机返回数据并且不删除:srandmember infoa。
五、有序集合(SortedSet)
Set 集合里面是没有任何顺序的保存,所以在 Redis 里面就提供有另外一套 Set 集合保存,称为有序存储。所谓的有序可以理解为它有两个列:一个列是存放内容,另外一个列是存放索引编号。
1、 追加新的集合:
zadd infos 0 hadoop
zadd infos 2 oracle
zadd infos 5 kafka
zadd infos 1 java
zadd infos 1 tomcat
2、 查看数据内容:zrange infos 0 -1
· 查看分数:zrange infos 0 -1 withscores;
|- 假设说你现在要进行一个综合的数据排名,例如:全球网站排名系统;
3、 删除集合数据:zrem infos java;
4、 数据(分数)增长:zincrby infos 10 hadoop;
5、 取得指定元素的索引数据:zrank infos hadoop;
6、 数据索引反转:
· “zrevrank infos tomcat”:原本的 tomcat 的索引值为 0,现在反转之后是 3,索引反转;
· “zrevrank infos hadoop”:原本的 hadoop 的索引值为 3,现在反转之后是 0,索引反转。
7、 反转后取得数据(由升序变为了降序):zrevrange infos 0 -1 withscores;
8、 取出指定索引范围的数据:zrangebyscore infos 0 2 withscores;
9、 取得指定分数范围的元素数量:zcount infos 1 20;
10、 取得指定集合的个数:zcard infos;