Redis的5中数据类型以及常见操作
来源:互联网 发布:淘宝新店会有人买吗 编辑:程序博客网 时间:2024/06/05 09:34
关于索引
redis中的索引规则如下:
1、从左边算起,第一个位置为0,第二个为1,以此类推;
2、从右边算起,第一个位置为-1,I第二个为-2,以此类推;
3、上面两种索引规则可以交叉使用
例如(0,3)表示从左边开始第一到第4个元素;(-3,-1)表示从右边开始第一到第四个元素;而(0,-1)表示所有元素
关于类型
2、Redis中的所有类型都不支持嵌套(例如Hash的value只能是一系列String,而不能是List或者Set)
关于随机
set类型支持随机返回集合中的member。这种随机的操作过程如下。
set内部采用咩有value的hash实现。也就是set的成员是hash的key。hash的存储方式是利用一个散列函数hash()计算key的值,之后把key存储在散列表对应的位置。如果出现冲突(多个key计算得到的散列值相等),那么它们组成一个链表。
在这个基础上,set随机返回成员的过程是:1)先随机选取一个散列值;2)如果这个位置上有没有值,则继续随机选择下一个;3)如果有只有一个key,那么返回这个key;4)如果是一个链表,那么随意从链表中选择一个key返回。
因此,没有组成链表的key被选中的可能性更大。
关于开闭区间
指定范围的时候默认是包括指定的值,即闭区间。可以用在值之前加“(”的方式使得不包括制定的值,即变为开区间。
关于排名
默认的排名均是采用升序(从小到大),带有rev(reverse)的命令将排序结果反转,变得到降序的结果。
一、String
1、set key value 设置“键-值”对
2、get key 获得键值
3、mget key [key ...]获得多个key的值
4、mset key value [key value ...]设置多个key-value
5、incr key 递增数字的值,如果key原来不存在,则建立key,并将key的值自增为。返回自增后的值或者错误信息(值不是数字)
6、incrby key increment 将key的值增加increment,返回增加后的值或者错误信息(值不是数字)
7、decr key与decrby key decrement做incr和incrby相同,只不过为减小操作、
8、incrbyfloat key increment 与incrby的差别就是递增的数字可以是双精度浮点数
9、append key value 向key值尾部追加value,如果key不存在则建立key,并把值设为value,返回追加后的value长度
10、strlen key 获得键值的长度,key不存在则返回0
11、getbit key offset获得offset处的bit值(0或者1),如果offset超出了值得长度默认为0
12、setbit key offset value 将键值offset处的位设置为value(0或者1),如果offset超过了键值长度或者key不存在,那么value所有位都会设为0
13、bitcount key [start] [end]统计start end标记的字节范围内位的值为1的个数
14、bitop operation destkey key [key ...] 对key执行operation代表的位运算,结果存在destkey中。其中operation可选OR、AND、XOR和NOT
二、Hash
Hash类型的结构为“key-hashtable”,其中hashtable中可以包括至多2^32-1个String类型的value.这种结构使得Hash类型很适合于存储对象。key用于标记一个对象,而hashtable中的每一个域对应对象的一个属性值。
1、hset key field value 设置key的field域,值为value
2、hget key field 获得key的field域的值
3、hmset key field value [field value ...]为key设置多个file-value
4、hmget key field [field ...]获得key的多个field的值
5、hgetall key获得key所有的filed-value
6、hexists key field 判断key的field是否存在
7、hsetnx key field value 如果key的field不存在,这设置key的field-value,如果存在不执行任何操作
8、hincrby key field increment key的field的值增加increment
9、hdel key field [field ...]删除key的一个或多个域
10、hkeys key 只获取key的所有域的名字(不获得值)
11、hvals key 只获得key的所有域的值(不获得域的名字)
12、hlen key 获得key的域的数量
三、List
1、lpush key value [value ...]/rpush key value [value ...]在key的链表左边/右边添加一个或多个value
2、lpop key/rpop key 从key的链表左边/右边弹出一个元素,并返回值
3、llen key获取key的链表长度
4、lrange key start stop 根据索引获得key的链表索引位于[start,stop]区间内的值,注意stop的值一定要大于start,例如0 4或者-3 -1,两套索引可以交叉使用,例如0 -1(获得所有)
5、lrem key count value 删除key的链表中前count个值为value的元素。返回实际删除的元素个数
6、lindex key index 获得key链表中指定索引位置的值
7、lset key index value 设置key的链表中指定索引的位置的值
8、ltrim key start end 保留key的链表中索引位于[start,end]范围内的链表片段
9、linsert key before|after pivot value 在key的链表中从左到右第一个值为pivot的元素的前面|后面插入值为value的元素
10、rpoplpush source destination 从source的链表的右边pop出第一个元素并从左边插入到destination的链表中
四、Set
Set是集合类型,集合类型与链表类型的区别在于1)集合不允许重复元素,链表可以;2)集合中的元素是无序的,链表中的元素是有序的
集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在。在Redis内部,集合类型是用值为空的hash实现的。所以查询操作为O(1)。同时,集合类型支持叫、并、差运算。
1、sadd key member [member...] 向集合中加入key以及一个或多个member。返回成功添加的member的个数。如果member重复,则忽略。
2、srem key member [member...]在key对应的集合中删除member,如果member不存在则忽略。返回成功删除的member个数。
3、smembers key 获得key对应集合的全部元素。
4、sismember key member 判断member是否是key对应集合的成员。
5、sdiff key [key...]计算集合的差集,多于2个的集合将依次做差集。(key1-key2)-key3...
6、sinter key [key...]计算集合的交集,同样支持多个集合运算。
7、sunion key [key...]计算集合的并集,支持多个集合的运算
8、scard key 获得key对应集合的元素个数。
9、sdiffstore destination key [key...]计算集合的差集,并且把结果存入destination对应的集合中。
10、sinterstore destination key[key...]计算集合的交集,并且把结果存入destination对应的集合中。
11、sunionstore desstination key[key...]计算集合的并集,并且把结果存储到destination对应的集合里。
12、srandmember key [count] 不给出count时,从key对应集合中随机返回一个member;当count>0时,从集合总随机返回count个不重复的元素;当count<0时,从集合中返回|count|个元素,但可能存在重复。
13、spop key 从集合中随机返回一个元素
五、Sorted Set
有序集合在集合的基础上为每个元素关联了一个分数。集合中元素的排序就是依据这个分数。要注意分数是由用户指定的,与元素本身没有必然关系。虽然集合中的每个元素都是不同的,但是它们的分数可以相同。因为元素之间有了顺序,所以有序结合支持获得前几个(后几个)元素、获得某一范围内的元素。这似乎与List有些相似。二者的区别主要表现在 1)List采用链表实现,靠近两边的访问速度快,但位于中间的元素的访问速度慢。2)有序结合是采用hash表和Skip list实现的,所以即使读取中间的元素也相对比较快(O(log(n)))。3)List中不能简单的调整某个元素的位置,但有序结合可以通过调整分数实现。4)有序结合比List更耗费内存。
1、zadd key score member [score member...] 向有序集合中添加一个或多个元素及分数,分数可以是整数、双精度浮点数,并且可以用“+inf”和“-inf”表示“正无穷大”和“负无穷大”。
2、ascore key member获得key对应有序集合中member的分数。
3、zrange key start stop [withscores] 按照分数从小到大的顺序返回索引从start到stop的所有元素,包括start和stop。withscoresu选项可以控制是否返回得分。如果两个元素分数相同,Redis会按照字典熟顺序(“0”<“9”<“A”<"Z"<"a"<"z")进行排序。
4、zrevrange key start stop [withscores] 与上面的唯一区别是按照的顺序是从大到小。
5、zrangebyscore key min max [withscores] [limit offset count] 返回key对应的有序集合中分数在min到max(包含min和max)之间的元素。在获得符合的列表后,offset制定从列表中第几个元素开始,count表示取得的个数。例如:arangebyscore tall 165 170 limit 2 5,表示获得身高在165-170之间的从第三个人开始的5个人。另外,可以用(min表示不包括min,(max表示不包括max。
6、zrevrangebyscore key min max [withscores] [limit offset count],与上面相同,只是返回顺序相反。
7、zincrby key increment member 给key对应有序集合中member的分数增加increment。
8、zcard key 获得key对应有序结合的数量。
9、zcount key min max 获得key对应的有序结合中在min max范围内的元素个数。
10、zrem key member [member...] 移除key对应有序集合中的一个或多个member。
11、zremrangebyrank key start stop 按照分数从小到大的顺序(最小的索引为0)删除处在制定排名位置的元素。
12、zremrangebyscore key min max 删除key对应有序集合中分数在min max之间的元素。
13、zrank key member 按照从小到大的顺序获得member的排名。
14、zinterstore destination numkeys key [key...] [weights weight [weight ...] ] [aggregate sum|min|max] 基本功能是计算有序集合的交集并且把结果存在destination中。destination中元素的分数的确定方式是:1)不给出参数的情况下默认是aggregate sum,及分数是这个元素在两个集合中分数的和;min即分数是该元素在两个集合中分数的较小值;max即较大值。3)另外,还可以通过weights weight [weight...]指定各个集合的权重。即最终分数是各个集合权重与分数乘积的和。
15、zunionstore destination numkeys key [key...] [weights weight [weight...] ] [aggregate sum|min|max] 与上面的唯一区别是用于集合的交运算。
六、其他
1、keys pattern 查找符合pattern的键,其中pattern支持glob通配符格式,返回所有匹配的键或者empty list or set
2、exists key判断一个键是否存在,返回1或者0
- Redis的5中数据类型以及常见操作
- Redis中常见数据类型操作命令
- 二:redis的数据类型及常见操作
- redis的常见数据类型
- redis常见的数据类型
- Redis中基本数据类型的操作
- Redis_lesson7 Redis中Set的常见操作
- redis五中数据类型操作
- Redis常见的5种不同的数据类型详解
- redis一:安装以及常见操作
- redis中各种数据类型对应的jedis操作命令
- redis中各种数据类型对应的jedis操作命令
- redis中各种数据类型对应的jedis操作命令
- redis中各种数据类型对应的jedis操作命令
- redis中各种数据类型对应的jedis操作命令
- redis中各种数据类型对应的jedis操作命令
- redis中各种数据类型对应的jedis操作命令
- redis中各种数据类型对应的jedis操作命令
- 从helloworld.c到a.out(3)词法分析
- 黑马程序员--string和stringBuffe和stringBuilder
- MyEclipse中 java.lang.StackOverflowError(堆栈溢出)的解决办法
- MAC地址在18字节及6字节之间的转换
- Java中堆与栈的区别
- Redis的5中数据类型以及常见操作
- 【转载,感悟】我对什么都感兴趣,可我迷茫了
- 使用 HttpClient 和 HtmlParser 实现简易爬虫
- Android学习笔记
- 动态链接库和静态链接库
- ios开发第一弹--概述
- Hello world ——1
- XML 与 HTML 中 需要转义的字符
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--客户端对象模型和REST APIs概览 Windows Phone