您的位置:首页 > 数据库 > Redis

Redis入门指南之数据类型

2017-06-19 22:11 393 查看


字符串类型

一个字符串类型键允许存储的最大容量512MB


1.赋值与取值

127.0.0.1:6379> set name yinnana
OK
127.0.0.1:6379> get name
"yinnana"



2.递增/递减数字

127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incrby num 5
(integer) 7
127.0.0.1:6379> decr num
(integer) 6
127.0.0.1:6379> decrby num 2
(integer) 4
127.0.0.1:6379> incrbyfloat num 2.3
"6.3"


3.向尾部追加值

127.0.0.1:6379> append name " haha"
(integer) 12
127.0.0.1:6379> get name
"yinnana haha"



4.获取字符串长度

127.0.0.1:6379> strlen name
(integer) 12



5.同时获得/设置多个键值

127.0.0.1:6379> mset city beijing sex male age 12
OK
127.0.0.1:6379> mget city sex age
1) "beijing"
2) "male"
3) "12"


6.位操作

GETBIT key offset

SETBIT key offset value

BITCOUNT key [start][end]

BITTOP operation destkey key[key...]

redis 键命名    对象类型:对象ID:对象属性


散列

redis的其他数据类型,不支持数据类型嵌套。

比如集合类型的每个元素都只能是字符串,不能是另个集合或者散列表。

散列类型适合存储对象:使用对象类别+ID构建键名,字段表示对象属性,而字段值则存储属性值。

127.0.0.1:6379> hset person hair black  ## HSET key field value 单个设置键值对
(integer) 1
127.0.0.1:6379> hset person face white
(integer) 1
127.0.0.1:6379> hmset person hand long leg short   ## HSET key field value field value 多个设置键值对
OK
127.0.0.1:6379> hget person hand        ## HGET key field 单个键获取
"long"
127.0.0.1:6379> hmget person hair face leg  ## HMGET key field ​[field ...]多个键获取
1) "black"
2) "white"
3) "short"
127.0.0.1:6379> hgetall person    ##获取键中所有字段和字段值
1) "hair"
2) "black"
3) "face"
4) "white"
5) "hand"
6) "long"
7) "leg"
8) "short"
127.0.0.1:6379> hexists person leg    ##判断字段是否存在  存在返回1,不存在返回0
(integer) 1
127.0.0.1:6379> hsetnx person leg fat  ##若字段不存在则赋值;若字段存在则不执行操作
(integer) 0
127.0.0.1:6379> hset person price "100"
(integer) 1
127.0.0.1:6379> hincrby person price 2
(integer) 102
127.0.0.1:6379> hdel person price ##删除某键
(integer) 1
127.0.0.1:6379> hkeys person  ##只获取字段名们
1) "hair"
2) "face"
3) "hand"
4) "leg"
127.0.0.1:6379> hvals person ##只获取字段值们
1) "black"
2) "white"
3) "long"
4) "short"
127.0.0.1:6379> hlen person  ##获取字段数量
(integer) 4



列表

内部使用双向链表实现的。借助列表类型,redis可以作为队列使用。

向列表两端增加元素,返回值表示增加元素后 列表的长度。

LPUSH    key    value    [value...]

RPUSH    key    value    [value...]

从列表两端弹出元素

LPOP    key

RPOP    key

LPOP命令执行分为两步操作:

第一步将列表左边的元素从列表中移除,第二步返回被移除的元素值。

获取列表中元素的个数

LLEN    key    键不存在时返回0

获得列表片段

LRANGE    key    start    stop

LRANGE命令在取得列表片段的同时不会像LPOP一样删除该片段,

跟开发语言中方在于法slice很像,区别在于LRANGE返回的值包含最右边元素

LRANGE支持负索引,表示从右边开始计算序数

例如,LRANGE    number    0    -1
可以获取列表中所有的元素

注意,如果start>stop,返回空列表。

如果stop>实际索引范围,则会返回到列表最右边的元素

删除列表中指定的值

LREM    key    count    value    删除列表中前count个值为value的元素

count>0 从左边删

count<0 从右边删

count=0 删除所有值为value的元素

获得/设置指定索引的元素值

LINDEX    key    index

LSET    key    index    value

只保留列表指定片段

LTRIM    key    start    end

删除指定索引范围之外的所有元素

向列表中插入新元素

LINSERT    key    BEFORE|AFTER    privot    value

首先会在列表中从左到右查找值为privot的元素,然后将value插入其前面/后面

将元素从一个列表转到另一个列表

RPOPLPUSH    source    destination

***********************************************************


集合类型

区别列表类型,集合类型无序性、唯一性

集合类型在redis内部是使用值为空的散列表(hash table).

常用操作是向集合中加入或删除元素、判断某个元素是否存在。

多个集合类型键之间还可以进行并集、交集和差集运算。

增加/删除元素

SADD    key    member    [member    ....]

SREM    key    member    [member 
  ....]

获取集合中的所有元素

SMEMBERS    key

判断元素是否存在在集合中

SISMEMBER    key    member

集合间运算

SDIFF    key    [key    ,,]        差集

SINTER    key    [key    ,,]    交集

SUNION    key    [key    ,,]    并集

获得集合中元素个数

SCARD    key

进行集合运算并将结果存储

SDIFFSTORE    destination    key    [key    ...]

SINTERSTORE    destination    key    [key 
  ...]

SUNIONSTORE    destination    key    [key 
  ...]

随机获得集合中的元素

SRANDMEMBER    key    [count]    可随机获得多个元素

count>0    不重复

count<0    可能相同

从集合中弹出一个元素

SPOP    key

*****************************

有序集合类型(Sorted Set)

在集合类型的基础上,有序集合类型为集合中的每个元素都关联了一个分数,不仅可以插入、删除、判断元素是否存在等集合类型的操作,还能获得分数最高(或最低)的前N个元素、获得指定分数范围内的元素等操作。

有序集合类型与列表类型

相似处:都是有序的、都可以获得一定范围的元素

区别:

1.列表类型通过链表实现的,获取靠近两端的数据速度极快,访问中间数据速度慢;有序集合类型是使用散列表和跳跃表(Skip list)实现的,即便读取中间部分数据也极快。

2.列表类型不能简单的调整某个元素的位置,但是有序集合可以(通过改变这个元素的分数)

3.有列表序集合比列表类型更耗费内存

命令

增加元素

ZADD key score member [score member...]

若该元素已经存在,则会用新的分数替换原有的分数

获得元素的分数

ZSCORE key member

获得排名在某个范围的元素列表

ZRANGE key start stop [WITHSCORES]

ZREVRANGE key start stop [WITHSCORES]

ZRANGE 按照元素分数从小到大的顺序返回索引从 start到stop之间的所有元素(包含两端的元素),如果需要同时获得元素的分数的话可以加上参数WITHSCORES。如果两个元素的分数相同,redis会按照字典顺序进行排列。

获得指定分数范围的元素

ZRANGEBYSCORE key min max [WITHSCORES][LIMIT offset count]

按照元素分数从小到大的顺序返回分数在min和max之间(包含min和max)的元素。如果希望分数范围不包含端点值,可以在分数前加上"("。-inf
 +inf 表示负无穷 正无穷。LIMIT offset count在获得的元素列表的基础上向后偏移offset个元素,并且只获取前count个元素。

增加某个元素的分数

ZINCRBY
key increment member

获得集合中元素的数量

ZCARD key

获得指定分数范围内的元素个数

ZCOUNT key min max

删除一个或多个元素

ZREM key member [member ...]

按照排名范围删除元素

ZREMRANGEBYRANK key start stop

按照分数范围删除元素

ZREMRANGEBYSCORE key min max

获得元素的排名

ZRANK key member

ZREVRANK key member

计算有序集合的交集

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]][AGGREGATE SUN|MIN|MAX]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: