redis学习——数据类型
一、内容简介
Redis不仅仅是简单的key-value 存储器,同时也是一种data structures server。传统的key-value是指支持使用一个key字符串来索引value字符串的存储,而Redis中,value不仅仅支持字符串,还支 持更多的复杂结构,包括列表,集合,哈希表等。现在我们一一讲解:Redis keys是采用二进制安全,这就意味着你可以使用任何二进制序列作为重点,从像"foo"可以联系一个 JPEG 文件。空字符串也是一个有效的密钥。
二、准备
启动服务
service redis-server start
启动客户端
redis-cli
三、Redis Strings(redis字符串)
字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据,例如: 一张JPEG格式的图片或者一个序列化的Ruby对象。一个字符串类型的值最多能存储512M字节的内容
1️⃣创建和检索strings命令——set、get
set key value ***set命令将取代现有的任何已经存在的key***
get key
2️⃣创建strings时加一步check——set nx、set xx
*如果key已存在,则无法创建
set key value nx
*如果key已存在,依然创建并取代现有已存在的key
set key value xx
3️⃣strings字符串类型可以做加法器——incr、incrby、decr、decrby
incr key使其value变成整数并运行value+1
incrby keyn 使其value变成整数并运行value+n
对应的减法器命令
decr,decrby
4️⃣批量创建 mset、mget
mset key1 value1 key2 value2 key3 value3
mget key1 key2 key3
四、Redis Lists (redis列表)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边) LPUSH 命令插入一个新的元素导头部, 而 RPUSH插入一个新元素导尾部.当一个这两个操作在一个空的Key上被执行的时候一个新的列表被创建。相似的,如果一个列表操作清空一个列表那么对应的 key将被从key空间删除。这是非常方便的语义,因为他们被调用使用一个空列表完全就像他们被调用时使用一个不存在的键值(可以)做为参数。
1️⃣创建、查看、删除——lpush、rpush、lrange、del
*创建列表,并从列头插入(左边插入)
lpush key value1 value2 value3
*创建列表,并从列尾插入(右边插入)
rpush key value4 value5 value6
*查看列表内的字符串value
lrange key 0 -1 ***0即列首-正数第一个,-1即列尾-倒数第一个
列表内排列顺序为
1)value3
2)value2
3)value1
4)value4
5)value5
6)value6
*删除列表key
del key
2️⃣从列表key中取出并显示元素——lpop、rpop
*从列表key中取出并显示元素第一个元素
lpop key
*从列表key中取出并显示元素倒数第一个元素 rpop key
三、Redis Hashes(redis 哈希)
Redis Hashes是字符串字段和字符串值之间的映射,因此他们是展现对象的完美数据类型。 (例如:一个有名,姓,年龄等等属性的用户):一个带有一些字段的hash仅仅需要一块很小的空间存储,因此你可以存储数以百万计的对象在一个小的 Redis实例中。 哈希主要用来表现对象,他们有能力存储很多对象,因此你可以将哈希用于许多其他的任务。
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
1️⃣创建、检索redis hashes——hset、hmset、hget、hgetall、hdel
*创建哈希key并添加一对映射
hset key filed0 value0
*创建哈希hash2并添加多对映射
hmset key field1:value1 field2:value2 field3:value3
*查看key中的某个映射
hget key field1
*查看key中所有映射
hgetall key
*追加一对映射
hset key filed4 value4
*追加多对映射
hmset key field5:value5 field6:value6 field7:value7
*删除key中的一对或多对映射
hdel key field4 field5
2️⃣加法操作并显示——hincrby
hincrby key field2 n
四、Redis set(redis 无序集合)
Redis 集合(Set)是一个无序的字符串集合. 你可以以O(1)的时间复杂度 (无论集合中有多少元素时间复杂度都是常量)完成添加,删除,以及测试元素是否存在。 Redis 集合拥有令人满意的不允许包含相同成员的属性。多次添加相同的元素,最终在集合里只会有一个元素。 实际上说这些就是意味着在添加元素的时候无须检测元素是否存在。 一个Redis集合的非常有趣的事情是他支持一些服务端的命令从现有的集合出发去进行集合运算,因此你可以在非常短的时间内进行合并(unions), 求交集(intersections),找出不同的元素(differences of sets)。
Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)
1️⃣创建、显示无序集合——sadd、smembers
*创建一个无序集合key
sadd key member1 member2 member3
*查看无序集合内成员
smember key
2️⃣判断member1元素是否是集合set1的成员
sismember key member1
是返回1,否返回0
五、Redis sorted set(redis 有序集合)
Redis有序集合与普通集合非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的没有成员都关联了一个评分,这个评分被用来按照从最低分到 最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了。 使用有序集合你可以以非常快的速度(O(log(N)))添加,删除和更新元素。因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序 集合作为一个没有重复成员的智能列表。在有序集合中,你可以很快捷的访问一切你需要的东西:有序的元素,快速的存在性测试,快速访问集合的中间元素! 简而言之使用有序集合你可以做完成许多对性能有极端要求的任务,而那些任务使用其他类型的数据库真的是很难完成的。
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
1️⃣创建有序集合,并添加成员——zadd
ZADD key score1 member1 [score2 member2]
**score可以重复,有相同score的member会按照字母或数字排列
2️⃣查看有序集合成员——zrange、zrevrange
正序查看
zrange key
倒序查看
zrevrange key
*默认不显示score,如果需要显示,添加withscore参数
zrange key withscore
zrevrange key withscore
更详细的命令介绍,参考http://www.runoob.com/redis/redis-sorted-sets.html