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五种数据类型介绍的更多相关文章

  1. redis五种数据类型的使用(zz)

    redis五种数据类型的使用 redis五种数据类型的使用 (摘自:http://tech.it168.com/a2011/0818/1234/000001234478_all.shtml ) 1.S ...

  2. redis五种数据类型的使用

    redis五种数据类型的使用 redis五种数据类型的使用 (摘自:http://tech.it168.com/a2011/0818/1234/000001234478_all.shtml ) 1.S ...

  3. redis五种数据类型的使用场景

    string 1.String 常用命令: 除了get.set.incr.decr mget等操作外,Redis还提供了下面一些操作: 获取字符串长度 往字符串append内容 设置和获取字符串的某一 ...

  4. Redis五种数据类型-设置key的过期时间

    1.redis命令客户端 [root@localhost bin]# ./redis-cli 127.0.0.1:6379> #是否运行着 127.0.0.1:6379> ping PON ...

  5. 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的五种数据类 ...

  6. redis五种数据类型的应用

    redis的五种数据类型和使用场景 string类型 string类型多用于缓存 set key value(value可以为json字符串) setnx多用于分布式锁(后面详细整理) 计数器 inc ...

  7. redis五种数据类型和常用命令及适用场景

    一.redis的5种数据类型: 1.基础理解: string 字符串(可以为整形.浮点型和字符串,统称为元素) list 列表(实现队列,元素不唯一,先入先出原则) set 集合(各不相同的元素) h ...

  8. redis 五种数据类型

    前言 前面学会了单机, 学会了集群, 但是redis咋用啊? 或者说, redis支持哪些数据类型呢? 常用的有五种: String , Hash, List, Set, zset(SortedSet ...

  9. 《闲扯Redis三》Redis五种数据类型之List型

    一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...

随机推荐

  1. apache ab 測试 apr_socket_connect(): 因为目标机器积极拒绝 无法连接

    遇到这样的情况通常是你开的并行数量太多了... 比如:ab -c 1000 -n 10000 http://localhost/index.html 如此大的请求就会挂掉,只是还是有补救措施的,能够通 ...

  2. 两个月后才更新一篇。。。。LIB和DLL的差别

     共同拥有两种库: 一种是LIB包括了函数所在的DLL文件和文件里函数位置的信息(入口).代码由执行时载入在进程空间中的DLL提供,称为动态链接库dynamic link library. 一种是 ...

  3. 获取Linux磁盘分区的UUID

    在设置fstab自动挂载时,需要填写如下的信息: # <file system> <mount point> <type> <options> < ...

  4. html css 仿微信底部自己定义菜单

    近期几个月一直从事微信开发,从刚開始的懵懂渐渐成长了一点. 今天认为微信底部自己定义菜单,假设能在html的页面上也能显示就好了. 记得曾经看过某个网页有类似效果.查找了该网页的css.  ok如今h ...

  5. Python获取CPU、内存使用率以及网络使用状态代码

    Python获取CPU.内存使用率以及网络使用状态代码_python_脚本之家 http://www.jb51.net/article/134714.htm

  6. HTTP要点概述:七,编码,压缩传输,分块传输

    一,编码: HTTP 在传输数据时可以按照数据原貌直接传输,但也可以在传输过程中通过编码提升传输速率.通过在传输时编码,能有效地处理大量的访问请求.但是,编码的操作需要计算机来完成,因此会消耗更多的 ...

  7. linux常见基础问题

    1,32位与64位的区别,怎么查看系统版本? 32位相比于64位处理速度更慢一些,64位同样也比32位更占内存.用户体验上没有区别:用uname  -a 查看系统版本信息 2,swap分区的作用是什么 ...

  8. 【Dairy】2016.10.23 观火&中彩记

    ...................... 就第一条可以! 观火10分钟,长郡附近老房子起火...

  9. 【Codeforces】Round #376 (Div. 2)

    http://codeforces.com/contest/731 不发题面了,自己点链接 总结一下 考场上 原以为这次要加很多raiting... 但FST狗记邓,只加了58rating 总结一下 ...

  10. NOI.AC #31 MST —— Kruskal+点集DP

    题目:http://noi.ac/problem/31 好题啊! 题意很明白,对于有关最小生成树(MST)的题,一般是要模拟 Kruskal 过程了: 模拟 Kruskal,也就是把给出的 n-1 条 ...