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. webpack-入口篇

    入口起点[Entry Points]: 单个入口(简写)语法 用法:entry: string|Array<string> 例子(webpack.config.js) const conf ...

  2. leetcode第一刷_Best Time to Buy and Sell Stock

    这样的题就不要去考虑N^2的算法了.肯定会超时的.乍一看,非常可能会想到贪心,可是普通的贪心思路是不行的,比方想找到一个最小值用来买入.尽管它跟最大值之间的差一定是最好的,可是最大值出如今它前面就不行 ...

  3. android中怎么将桌面较长的图标名称显示完整

    找到相应的 res 资源, 改动其 styles.xml <style name="WorkspaceIcon.Portrait">         <item ...

  4. Java后端发出post请求带参数并接收返回的json

    核心代码: 参数格式: “key1=value1&key2=value2” /*** sendUrl    (远程请求的URL)* param    (远程请求参数)* JSONObject  ...

  5. input keyevent发送按键值【转】

    本文转载自:http://blog.csdn.net/moyu123456789/article/details/71209893 1.adb shell进入android设备,执行命令input k ...

  6. mysqldump 导出数据表,和数据

    目录 导出数据库表与数据 导出数据表数据 导出多个表数据 只导出数据 只导出创建表的数据 导出数据库表与数据 mysqldump -uroot -p caomall>tmp.sql 导出数据表数 ...

  7. [Codeforces 666B] World Tour

    [题目链接] https://codeforces.com/contest/666/problem/B [算法] 首先 , 用BFS求出任意两点的最短路径 然后 , 我们用f[i][0-2]表示从i出 ...

  8. maven仓库管理

    maven仓库管理很重要,如果是依赖jar下不到或下错了或出现莫名的报错.曾几何时为此花费了不少时间. 首先,注意自己maven仓库配置,里面有本地仓库目录和远程maven仓库,当自己本地没有依赖时可 ...

  9. SYSUCPC2017 DAG最多能添加多少边?

    校赛的一道题目 难度不大 不过还是挺有趣的 题意:给定一个有向图,问此图是不是一个DAG且不包含重边 如果是的话 回答最多可以添加多少条边且图仍然是个DAG 考虑对于任意一个点u 添加一条边(u,v) ...

  10. JSP-Runoob:JSP 教程

    ylbtech-JSP-Runoob:JSP 教程 1.返回顶部 1. JSP 教程 JSP 与 PHP.ASP.ASP.NET 等语言类似,运行在服务端的语言. JSP(全称Java Server ...