(转) 淘淘商城系列——Redis五种数据类型介绍
http://blog.csdn.net/yerenyuan_pku/article/details/72855562
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。下面我分别介绍之。
String(字符串)
字符串是Redis中最基本的数据类型,它能够存储任何类型的字符串,包含二进制数据。可以用于存储邮箱,JSON化的对象,甚至是一张图片,一个字符串允许存储的最大容量为512MB。字符串是其他四种类型的基础,与其他几种类型的区别从本质上来说只是组织字符串的方式不同而已。
实例
这里我将使用如下命令:
- set——赋值,用法:
set key value
。 - get——取值,用法:
set key
。 - incr——递增数字,仅仅对数字类型的键有用,相当于Java的i++运算,用法:
incr key
。 - incrby——增加指定的数字,仅仅对数字类型的键有用,相当于Java的i+=3,用法:
incrby key increment
,其意思是key自增increment,increment可以为负数,表示减少。 - decr——递减数字,仅仅对数字类型的键有用,相当于Java的i–,用法:
decr key
。
我们使用set命令在当前redis数据库里面设置一个key,名称为hello,值为abcd,然后再通过get命令取值。
192.168.25.128:6379> set hello abcd
OK
192.168.25.128:6379> get hello
"abcd"
如果大家想要重置名称为hello的key的值,同样可使用set命令,如下,再使用get命令取值,就能发现key的值已被修改。
192.168.25.128:6379> set hello 123
OK
192.168.25.128:6379> get hello
"123"
注意:get、set命令不区分大小写,但key是区分大小写的。如果大家不信,可以再使用set命令在当前redis数据库里面设置一个key,名称为Hello,值为456,然后使用keys *
命令查看当前redis数据库这里面有多少个key。
192.168.25.128:6379> set Hello 456
OK
192.168.25.128:6379> keys *
1) "hello"
2) "Hello"
分别使用get命令取出以上两个键所对应的值,可发现键为hello所对应的值是123,键为Hello所对应的值是456。
192.168.25.128:6379> GET Hello
"456"
192.168.25.128:6379> get hello
"123"
接下来,演示incr和decr命令,关于这两个命令我上面已经详细讲解过了,这里只给出案例。
192.168.25.128:6379> incr hello
(integer) 124
192.168.25.128:6379> decr hello
(integer) 123
192.168.25.128:6379> decr hello
(integer) 122
192.168.25.128:6379> decr hello
(integer) 121
192.168.25.128:6379> decr hello
(integer) 120
Hash(哈希)
Hash类型相当于Java中的HashMap,它的值是一个字典,保存很多key-value对,每对key-value的值和键都是字符串类型,换句话说,Hash类型不能嵌套其他数据类型。对此,我也有我个人的理解:这种类型相当于一个key对应一个Map,Map中还有key-value对,使用hash可对key进行归类。
实例
这里我将使用如下命令:
- hset——赋值,用法:
hset key field value
。 - hget——取值,用法:
hget key field
。 - hincrby——增加数字,仅对数字类型的值有用,用法:
hincrby key field increment
。
我们使用hset命令向hash中添加内容,如下所示。
192.168.25.128:6379> hset hash1 field1 1
(integer) 1
192.168.25.128:6379> hset hash1 field2 2
(integer) 1
192.168.25.128:6379> hset hash1 field3 3
(integer) 1
192.168.25.128:6379> hset hash2 field1 a
(integer) 1
注意:一个Hash类型键最多可以存储2∧32 - 1个键值对(40多亿)。
接着使用keys *
命令查看当前redis数据库这里面有多少个key。
192.168.25.128:6379> keys *
1) "hash1"
2) "hello"
3) "hash2"
4) "Hello"
然后可以使用hget命令从hash中取内容,如下所示。
192.168.25.128:6379> hget hash1 field1
"1"
192.168.25.128:6379> hget hash1 field2
"2"
192.168.25.128:6379> hget hash1 field3
"3"
192.168.25.128:6379> hget hash2 field1
"a"
最后,来演示一下hincrby命令,关于这个命令我上面已经详细讲解过了,这里只给出案例。
192.168.25.128:6379> hincrby hash1 field1 2
(integer) 3
192.168.25.128:6379> hincrby hash1 field1 1
(integer) 4
192.168.25.128:6379> hincrby hash1 field1 10
(integer) 14
List(列表)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
实例
这里我将使用如下命令:
- lpush——向列表左端添加元素,用法:
lpush key value
。 - lrange——获取列表中某一片段的元素,用法:
lrange key start stop
,index从0开始,-1表示最后一个元素。 - rpush——向列表右端添加元素,用法:
rpush key value
。 - lpop——从列表左端弹出元素,用法:
lpop key
。 - rpop——从列表右端弹出元素,用法:
rpop key
。
我们使用lpush命令向list1列表左端添加元素,如下所示,然后使用lrange list1 0 -1
命令查看全部元素。
192.168.25.128:6379> lpush list1 a b c d
(integer) 4
192.168.25.128:6379> lrange list1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
注意:列表最多可存储2∧32 - 1元素 (4294967295, 每个列表可存储40多亿)。
接着使用rpush命令向list1列表右端添加元素,如下所示,然后使用lrange list1 0 -1
命令查看全部元素。
192.168.25.128:6379> rpush list1 1 2 3 4
(integer) 8
192.168.25.128:6379> lrange list1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "1"
6) "2"
7) "3"
8) "4"
紧接着,我们使用lpop命令从列表左端弹出“d”元素,然后再次使用lrange list1 0 -1
命令查看全部元素,如下所示。
192.168.25.128:6379> lpop list1
"d"
192.168.25.128:6379> lrange list1 0 -1
1) "c"
2) "b"
3) "a"
4) "1"
5) "2"
6) "3"
7) "4"
最后,我们使用rpop命令从列表右端弹出“4”元素,然后再次使用lrange list1 0 -1
命令查看全部元素,如下所示。
192.168.25.128:6379> rpop list1
"4"
192.168.25.128:6379> lrange list1 0 -1
1) "c"
2) "b"
3) "a"
4) "1"
5) "2"
6) "3"
Set(集合)
Redis中的Set是string类型元素的集合,集合中每个元素都是不同的,集合中的元素个数最多为2的32次方-1个,集合中的元素是没有顺序的,而且不能重复。
实例
这里我将使用如下命令:
- sadd——添加元素,用法:
sadd key value1 [value2 value3 ...]
。 - smembers——获得集合中所有元素,用法:
smembers key
。 - srem——删除元素,用法:
srem key value2 [value2 value3 ...]
。
我们首先使用sadd命令向set1集合中添加元素,然后使用smembers set1
命令获得集合中的所有元素,如下所示。
192.168.25.128:6379> sadd set1 a b c c c d
(integer) 4
192.168.25.128:6379> smembers set1
1) "d"
2) "a"
3) "c"
4) "b"
注意:以上实例中“c”添加了三次,但根据集合内元素的唯一性,后两次插入的元素将被忽略。集合中最大的成员数为2∧32 - 1(4294967295,每个集合可存储40多亿个成员)。
现在我们使用srem命令删掉set1集合中的“a”元素,然后再使用smembers set1
命令获得集合中的所有元素,如下所示。
192.168.25.128:6379> srem set1 a
(integer) 1
192.168.25.128:6379> smembers set1
1) "d"
2) "c"
3) "b"
zset(sorted set:有序集合)
Redis中的zset和set一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。Redis正是通过分数来为集合中的成员进行从小到大的排序的。zset的成员是唯一的,但分数(score)却可以重复。
实例
这里我将使用如下命令:
- zadd——添加元素,用法:
zadd key score1 value1 [score2 value2 score3 value3 ...]
。 - zrange——获取排名在某个范围的元素,用法:
zrange key start stop [WITHSCORE]
,按照元素从小到大的顺序排序,从0开始编号,包含start和stop对应的元素,WITHSCORE选项表示是否返回元素分数。 - zrevrange——获取排名在某个范围的元素,用法:
zrevrange key start stop [WITHSCORE]
,和上一个命令用法一样,只是这个倒序排序的。 - zrem——删除一个或多个元素,用法:
zrem key value1 [value2 ...]
。
我们首先使用zadd命令向zset1集合中添加元素,然后使用zrange zset1 0 -1
命令获得集合中的所有元素(通过分数来为集合中的成员进行从小到大的排序),如下所示。
192.168.25.128:6379> zadd zset1 2 a 5 b 1 c 6 d
(integer) 4
192.168.25.128:6379> zrange zset1 0 -1
1) "c"
2) "a"
3) "b"
4) "d"
然后使用zrem命令删除zset1集合中的“a”元素,然后使用zrange zset1 0 -1
命令获得集合中的所有元素(通过分数来为集合中的成员进行从小到大的排序),如下所示。
192.168.25.128:6379> zrem zset1 a
(integer) 1
192.168.25.128:6379> zrange zset1 0 -1
1) "c"
2) "b"
3) "d"
接着我们使用zrevrange zset1 0 -1
命令获得集合中的所有元素(通过分数来为集合中的成员进行从大到小的排序),如下所示。
192.168.25.128:6379> zrevrange zset1 0 -1
1) "d"
2) "b"
3) "c"
还可以使用zrange zset1 0 -1 withscores
命令查看元素及其分数,如下所示。
192.168.25.128:6379> zrange zset1 0 -1 withscores
1) "c"
2) "1"
3) "b"
4) "5"
5) "d"
6) "6"
当然了,也可使用zrevrange zset1 0 -1 withscores
命令查看元素及其分数,不过是通过分数来为集合中的成员进行从大到小排序的。
192.168.25.128:6379> zrevrange zset1 0 -1 withscores
1) "d"
2) "6"
3) "b"
4) "5"
5) "c"
6) "1"
(转) 淘淘商城系列——Redis五种数据类型介绍的更多相关文章
- redis五种数据类型的使用(zz)
redis五种数据类型的使用 redis五种数据类型的使用 (摘自:http://tech.it168.com/a2011/0818/1234/000001234478_all.shtml ) 1.S ...
- redis五种数据类型的使用
redis五种数据类型的使用 redis五种数据类型的使用 (摘自:http://tech.it168.com/a2011/0818/1234/000001234478_all.shtml ) 1.S ...
- redis五种数据类型的使用场景
string 1.String 常用命令: 除了get.set.incr.decr mget等操作外,Redis还提供了下面一些操作: 获取字符串长度 往字符串append内容 设置和获取字符串的某一 ...
- Redis五种数据类型-设置key的过期时间
1.redis命令客户端 [root@localhost bin]# ./redis-cli 127.0.0.1:6379> #是否运行着 127.0.0.1:6379> ping PON ...
- Redis五种数据类型应用场景
目录 1.1 回顾 2.1 应用场景 2.1.1 String 2.1.2 Hash 2.1.3 List 2.1.4 Zet 2.1.5 zset 3.1 小结 1.1 回顾 Redis的五种数据类 ...
- redis五种数据类型的应用
redis的五种数据类型和使用场景 string类型 string类型多用于缓存 set key value(value可以为json字符串) setnx多用于分布式锁(后面详细整理) 计数器 inc ...
- redis五种数据类型和常用命令及适用场景
一.redis的5种数据类型: 1.基础理解: string 字符串(可以为整形.浮点型和字符串,统称为元素) list 列表(实现队列,元素不唯一,先入先出原则) set 集合(各不相同的元素) h ...
- redis 五种数据类型
前言 前面学会了单机, 学会了集群, 但是redis咋用啊? 或者说, redis支持哪些数据类型呢? 常用的有五种: String , Hash, List, Set, zset(SortedSet ...
- 《闲扯Redis三》Redis五种数据类型之List型
一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...
随机推荐
- Maven具体解释之仓库------本地仓库、远程仓库
在Maven中,不论什么一个依赖.插件或者项目构建的输出.都能够称之为构件. Maven在某个统一的位置存储全部项目的共享的构件.这个统一的位置.我们就称之为仓库.(仓库就是存放依赖和插件的地方) 不 ...
- yarn-cli 简介
Yarn 提供了丰富的命令行命令来帮你应付你所开发的 Yarn 包的方方面面的工作,包括安装.管理.发布等等. 虽然我们在这里按照字母顺序列出了我们提供的所有命令,但是某些更常用的命令还是要着重提一下 ...
- tomcat用80port能够启动,可是浏览器不显示tomcat首页
一.打开执行(ctrl+r)->输入cmd->确定->输入netstat -ano 结果检測到 :80port被system 占用,如图所看到的 打开进程发现确实被 PID为 4 的 ...
- oracle事务处理及实例演示jdbc操作批量删除
事务 作为逻辑处理的基本单位,对于数据库操作来说由一条或者多条sql语句来构成.当然还有针对非数据库操作的,如在计算机中设置的还原点即是一个非常好的应用. 对于事务的基本性质在还有一篇中有所叙述:SQ ...
- keepalived + lvs marster 与 backup 之间的 高可用
简介 keepalived 是linux下一个轻量级的高可用解决方案,它与HACMP实现功能类似,都可以实现服务或者网络的高可用,但是又有差别:hacmp是一个专业的.功能完善的高可用软件,它提供了H ...
- 浅谈MySQL load data local infile细节 -- 从源码层面
相信大伙对mysql的load data local infile并不陌生,今天来巩固一下这里面隐藏的一些细节,对于想自己动手开发一个mysql客户端有哪些点需要注意的呢? 首先,了解一下流程: 3个 ...
- Node.js创建自签名的HTTPS服务器
https://cnodejs.org/topic/54745ac22804a0997d38b32d 用Node.js创建自签名的HTTPS服务器 发布于 4 年前 作者 eeandrew 6 ...
- c#实现播放器的集中方式
http://www.cnblogs.com/iskyoole/archive/2012/03/25/2417181.html(原文链接地址) 一.使用vs自带的windows media play控 ...
- ramfs、rootfs和initramfs【转】
ramfs, rootfs and initramfs October 17, 2005 Rob Landley <rob@landley.net> =================== ...
- 第六周 Leetcode 446. Arithmetic Slices II - Subsequence (HARD)
Leetcode443 题意:给一个长度1000内的整数数列,求有多少个等差的子数列. 如 [2,4,6,8,10]有7个等差子数列. 想了一个O(n^2logn)的DP算法 DP[i][j]为 对于 ...