REDIS数据类型

目录

1.String(一般用于缓存、限流、计数器、分布式锁、分布式Session)​编辑

2.List(一般用于关注人、简单队列等)

3.Set(一般用于赞、踩、标签、好友关系等)

4.Zset(一般用于排行榜等)

5.Hash(一般用于存储用户信息、用户主页访问量、组合查询等)

6.Bitmaps

(1)Bitmaps本身不是一种数据类型,实际上它就是字符串(key-value),但是它可以对字符串的位进行操作

(2)Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一个以位为单位的数组, 数组的每个单元只能存储0和1, 数组的下标在Bitmaps中叫做偏移量

 7.HyperLogLog(用来做基数统计的算法,HyperLogLog 的优点是:在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且很小)

8.Geospatial


1.String(一般用于缓存、限流、计数器、分布式锁、分布式Session)REDIS数据类型_第1张图片

 演示

127.0.0.1:6379> set name redis    #创建key与values
OK
 
 
127.0.0.1:6379> get name    #获取key的values
"redis"
 
 
127.0.0.1:6379> getrange name 0 4    #取0-4的字符
"redis"
 
 
127.0.0.1:6379> setbit bit 2 0  #把第二个位上的值设置成0
(integer) 1
 
 
127.0.0.1:6379> getbit bit 2    #获取第二个位上的值
(integer) 0
 
 
127.0.0.1:6379> mset key1 "Hello" key2 "World"    #同时设置一个或多个key与values
OK
 
 
127.0.0.1:6379> mget key1 key2    #同时获取多个key的values
1) "Hello"
2) "World"
 
 
127.0.0.1:6379> getset key1 "你好"    #将给定 key 的值设为 value ,并返回 key 的旧值
"Hello"
 
 
127.0.0.1:6379> setex key2 10 "world"  #将值 value 关联到 key ,并将 key 的过期时间设为10秒
OK
127.0.0.1:6379> get key2    #10秒后values消失
(nil)
 
 
127.0.0.1:6379> setnx key3 good    #只有在 key 不存在时设置 key 的值
(integer) 1
127.0.0.1:6379> get key3
"good"
 
 
127.0.0.1:6379> setrange key3 0 yes    #从第0位覆盖原来的值
(integer) 4
127.0.0.1:6379> get key3
"yesd"
 
 
127.0.0.1:6379> strlen key3    #返回 key 所储存的字符串值的长度
(integer) 4
 
 
127.0.0.1:6379> msetnx key4 one key5 two key6 thire    
(integer) 1        #同时设置一个或多个 key-value 对,当且仅当所有给定key都不存在
 
 
127.0.0.1:6379> psetex key4 1000 one    #与SETEX命令相似,但它以毫秒为单位设置key的生存时间
OK
127.0.0.1:6379> get key4
(nil)
 
 
127.0.0.1:6379> set key7 8    #将 key 中储存的数字值增一
OK
127.0.0.1:6379> incr key7
(integer) 9
127.0.0.1:6379> get key7
"9"
127.0.0.1:6379> 
 
 
127.0.0.1:6379> incrbyfloat key7 3    #将 key 所储存的值加上给定的增量值(increment)
"12"
 
 
127.0.0.1:6379> set key8 6.66    #将 key 所储存的值加上给定的浮点增量值(increment)
OK
127.0.0.1:6379> incrbyfloat key8 2.22
"8.88"
 
 
127.0.0.1:6379> decr key7     #将 key 中储存的数字值减一
(integer) 11
 
 
127.0.0.1:6379> decrby key7 2    #将key中储存的数字减去指定的数值
(integer) 9
 
 
127.0.0.1:6379> set key9 good
OK
127.0.0.1:6379> append key9 afternoon    #如果key已经存在并且是一个字符串,APPEND命令将指定
(integer) 13                              的value追加到该key原来值value的末尾                             
127.0.0.1:6379> get key9
"goodafternoon"

2.List(一般用于关注人、简单队列等)

REDIS数据类型_第2张图片

演示

127.0.0.1:6379> get mykey1
(nil)
127.0.0.1:6379> lpush mykey1 5 6 7    #将一个或多个值插入到列表头部
(integer) 3
127.0.0.1:6379> lrange mykey1 0 2
1) "7"
2) "6"
3) "5"
 
127.0.0.1:6379> lpop mykey1    #移出并获取列表的第一个元素
"7"
 
 
127.0.0.1:6379> lrange mykey1 0 1    #获取列表指定范围内的元素
1) "6"
2) "5"
 
 
127.0.0.1:6379> lpushx mykey1 8    #将一个值插入到已存在的列表头部
(integer) 3
127.0.0.1:6379> lrange mykey1 0 2    
1) "8"
2) "6"
3) "5"
 
 
 
 
127.0.0.1:6379> rpush mykey1 1 2 3    #在列表中添加一个或多个值
(integer) 6
127.0.0.1:6379> lrange mykey1 0 6
1) "8"
2) "6"
3) "5"
4) "1"
5) "2"
6) "3"
 
 
127.0.0.1:6379> rpop mykey1    #移除列表的最后一个元素,返回值为移除的元素
"3"
 
 
127.0.0.1:6379> lrange mykey1 0 7    #为已存在的列表添加值(列表末尾添加)
1) "8"
2) "6"
3) "5"
4) "1"
5) "2"
6) "9"
 
 
127.0.0.1:6379> linsert mykey1 before 1 4    #在列表的元素前插入元素
(integer) 7
127.0.0.1:6379> lrange mykey1 0 8
1) "8"
2) "6"
3) "5"
4) "4"
5) "1"
6) "2"
7) "9"
127.0.0.1:6379> linsert mykey1 after 1 3    #在列表的元素后插入元素
(integer) 8
127.0.0.1:6379> lrange mykey1 0 8
1) "8"
2) "6"
3) "5"
4) "4"
5) "1"
6) "3"
7) "2"
8) "9"
 
 
127.0.0.1:6379> llen mykey1    #获取列表长度
(integer) 6
 
 
127.0.0.1:6379> lindex mykey1 3    #通过索引获取列表中的元素
"4"
 
 
127.0.0.1:6379> lset mykey1 2 6    #通过索引设置列表元素的值
OK
127.0.0.1:6379> lrange mykey1 0 8
1) "8"
2) "6"
3) "6"
4) "1"
5) "3"
6) "2"
7) "9"
 
 
127.0.0.1:6379> lrem mykey1 2 6    #移除列表元素
(integer) 2
127.0.0.1:6379> lrange mykey1 0 8
1) "8"
2) "1"
3) "3"
4) "2"
5) "9"
 
 
127.0.0.1:6379> ltrim mykey1 2 4    #对一个列表进行修剪,就是让列表只保留指定区间内的元素,
OK                                   不在指定区间之内的元素都将被删除
127.0.0.1:6379> lrange mykey1 0 8
1) "3"
2) "2"
3) "9"
 
 
127.0.0.1:6379> blpop mykey1 5    #移出并获取列表的第一个元素
1) "mykey1"
2) "3"
127.0.0.1:6379> blpop mykey2 5    #如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为
(nil)                              止
(5.07s)
 
 
127.0.0.1:6379> brpop mykey1 5    #移出并获取列表的最后一个元素
1) "mykey1"
2) "9"
127.0.0.1:6379> brpop mykey2 5    #如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为
(nil)                              止
(5.04s)
 
 
127.0.0.1:6379> brpoplpush mykey1 mykey2 5    #从列表中弹出一个值,将弹出的元素插入到另外一
"2"                                            个列表中并返回它;
127.0.0.1:6379> llen mykey1    #查看key的长度确认为0
(integer) 0
127.0.0.1:6379> brpoplpush mykey1 mykey2 5    #如果列表没有元素会阻塞列表直到等待超时或发现
(nil)                                          可lpu弹出元素为止
(5.07s)
 
 
127.0.0.1:6379> rpoplpush mykey1 mykey2     #移除列表的最后一个元素,并将该元素添加到另一个
"1"                                          列表并返回

3.Set(一般用于赞、踩、标签、好友关系等)

 REDIS数据类型_第3张图片

演示 

127.0.0.1:6379> sadd scond hello world    #向集合添加一个或多个成员
(integer) 2
 
 
127.0.0.1:6379> smembers scond    #返回集合中的所有成员
1) "world"
2) "hello"
 
 
127.0.0.1:6379> scard scond    #获取集合的成员数
(integer) 2
 
 
127.0.0.1:6379> srandmember scond 2    #返回集合中一个或多个随机数
1) "world"
2) "hello"
 
 
127.0.0.1:6379> sismember scond member    #判断 member hello 元素是否是集合 key 的成员
(integer) 0                                若是返回1不是返回0
127.0.0.1:6379> sismember scond hello
(integer) 1
 
 
127.0.0.1:6379> srem scond hello    #移除集合中一个或多个成员
(integer) 1
127.0.0.1:6379> smembers scond    #返回集合中的所有成员
1) "world"
 
 
127.0.0.1:6379> smembers scond    #返回scond集合所有成员
1) "one"
2) "world"
3) "good"
4) "hello"
5) "two"
127.0.0.1:6379> smembers third    #返回third集合所有成员
1) "four"
2) "one"
3) "two"
4) "thire"
127.0.0.1:6379> sdiff scond third    #返回给定所有集合的差集
1) "world"
2) "hello"
3) "good"
 
 
127.0.0.1:6379> sdiffstore redis scond third    ##返回给定所有集合的差集并存储在 redis 中
(integer) 3
127.0.0.1:6379> smembers redis    #返回redis的所有成员
1) "world"
2) "hello"
3) "good"
 
 
127.0.0.1:6379> sinter scond third    #返回给定所有集合的交集
1) "one"
2) "two"
 
 
127.0.0.1:6379> sinterstore redis1 scond third    #返回给定所有集合的交集并存储在redis中
(integer) 2
127.0.0.1:6379> smembers redis1    #返回redis所有成员
1) "one"
2) "two"
 
 
127.0.0.1:6379> sunion scond third    #返回所有给定集合的并集
1) "two"
2) "thire"
3) "four"
4) "world"
5) "one"
6) "good"
7) "hello"
 
 
127.0.0.1:6379> sunionstore redis2 scond third    #所有给定集合的并集存储在redis2集合中
(integer) 7
127.0.0.1:6379> smembers redis2    #返回redis2中所有成员
1) "two"
2) "thire"
3) "four"
4) "world"
5) "one"
6) "good"
7) "hello"
 
 
127.0.0.1:6379> smove scond third good    #将good元素从scond集合移动到third集合
(integer) 1
127.0.0.1:6379> smembers third    #返回third集合中所有成员查看是否有good这个成员
1) "four"
2) "one"
3) "two"
4) "thire"
5) "good"
 
 
127.0.0.1:6379> spop scond    #移除并返回集合中的一个随机元素
"one"
 
 
127.0.0.1:6379> sscan redis2 0 match t* count 3    #迭代集合中的元素
1) "1"
2) 1) "two"
127.0.0.1:6379> sscan redis2 1 match t* count 3
1) "7"
2) 1) "thire"
127.0.0.1:6379> sscan redis2 7 match t* count 3
1) "0"
2) (empty array)

4.Zset(一般用于排行榜等)

REDIS数据类型_第4张图片

演示 

127.0.0.1:6379> zadd course 1 one    #向有序集合添加一个或多个成员,或者更新已存在成员的分数
(integer) 1
127.0.0.1:6379> zadd course 2 two
(integer) 1
127.0.0.1:6379> zadd course 3 thire
(integer) 1
127.0.0.1:6379> zadd course 4 four
(integer) 1
 
 
127.0.0.1:6379> zcard course    #获取有序集合的成员数
(integer) 4
 
 
127.0.0.1:6379> zcount course 1 4    #计算在有序集合中指定区间分数的成员数
(integer) 4
 
 
127.0.0.1:6379> zincrby course 5 two    #有序集合中对指定成员的分数加上增量 
"7"
 
 
127.0.0.1:6379> zlexcount course [one [four    #在有序集合中计算指定字典区间内成员数量
(integer) 0
 
 
127.0.0.1:6379> zrange course 0 10 withscores    #通过索引区间返回有序集合指定区间内的成员
1) "one"
2) "1"
3) "thire"
4) "3"
5) "four"
6) "4"
7) "two"
8) "7"
 
 
127.0.0.1:6379> zrangebylex course [o [z    #通过字典区间返回有序集合的成员
1) "one"
2) "thire"
3) "four"
4) "two"
 
 
127.0.0.1:6379> zrangebyscore course 1 7    #通过分数返回有序集合指定区间内的成员
1) "one"
2) "thire"
3) "four"
4) "two"
 
 
127.0.0.1:6379> zrank course two    #返回有序集合中指定成员的索引
(integer) 3
 
 
127.0.0.1:6379> zrem course two    #移除有序集合中的一个或多个成员
(integer) 1
 
 
127.0.0.1:6379> zremrangebylex course [a [z    #移除有序集合中给定的字典区间的所有成员
(integer) 3
 
 
127.0.0.1:6379> zremrangebyrank course 0 2    #移除有序集合中给定的排名区间的所有成员
(integer) 3
 
 
127.0.0.1:6379> zremrangebyscore course 1 3    #移除有序集合中给定的分数区间的所有成员
(integer) 3
 
 
127.0.0.1:6379> zrevrange course 0 4    #返回有序集中指定区间内的成员,通过索引,分数从高到
1) "four"                                低
2) "thire"
3) "two"
4) "one"
 
 
127.0.0.1:6379> zrevrangebyscore course 4 1     #返回有序集中指定分数区间内的成员,分数从高
1) "four"                                        到低排序
2) "thire"
3) "two"
4) "one"
 
 
127.0.0.1:6379> zrevrank course two    #返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
(integer) 2
 
 
127.0.0.1:6379> zscore course thire    #返回有序集中,成员的分数值
"3"
 
 
127.0.0.1:6379> zinterstore class 2 course stud    #计算给定的一个或多个有序集的交集并将结
(integer) 2                                         果集存储在新的有序集合class中
 
 
127.0.0.1:6379> zunionstore address 2 course ip    #计算给定的一个或多个有序集的并集,并存
(integer) 6                                         储在新的 key 中
 
 
127.0.0.1:6379> zscan address 0 match f* count 2    #迭代有序集合中的元素(包括元素成员和元
1) "0"                                               素分值)
2) 1) "four"
   2) "4"
   3) "five"
   4) "5"

5.Hash(一般用于存储用户信息、用户主页访问量、组合查询等)

REDIS数据类型_第5张图片

演示

127.0.0.1:6379> hset myhash field1 "zhangsan"    #将哈希表 key 中的字段 field 的值设为 value
(integer) 1
 
 
127.0.0.1:6379> hget myhash field1    #获取存储在哈希表中指定字段的值
"zhangsan"
 
 
127.0.0.1:6379> hgetall myhash    #获取在哈希表中指定 key 的所有字段和值
1) "field1"
2) "zhangsan"
 
 
127.0.0.1:6379> hexists myhash field2    #查看哈希表 key 中,指定的字段是否存在,若不存在则
(integer) 0                               返回0,若存在则返回1
127.0.0.1:6379> hexists myhash field1
(integer) 1
 
 
127.0.0.1:6379> hsetnx myhash field2 "lisi"    #只有在字段field不存在时,设置哈希表字段的值
(integer) 1
 
 
127.0.0.1:6379> hgetall myhash    #获取所有哈希表中的字段
1) "field1"
2) "zhangsan"
3) "field2"
4) "lisi"
 
 
127.0.0.1:6379> hvals myhash    #获取哈希表中所有值
1) "zhangsan"
2) "lisi"
 
 
127.0.0.1:6379> hlen myhash    #获取哈希表中字段的数量
(integer) 2
 
 
127.0.0.1:6379> hmget myhash field1 field2    #获取所有给定字段的值
1) "zhangsan"
2) "lisi"
 
 
127.0.0.1:6379> hmset myhash field3 "wangwu" field4 "laoliu" field5 "fanqi"   
OK                                   #同时将多个 field-value (域-值)对设置到哈希表 key 中
 
 
127.0.0.1:6379> hmset myhash field6 66    #将数值放入myhash表中
OK
127.0.0.1:6379> hincrby myhash field6 11    #为哈希表 key 中的指定字段的整数值加上增量11 
(integer) 77                                 
 
 
127.0.0.1:6379> hmset myhash field7 8.8    #将浮点数放入myhash表中
OK
127.0.0.1:6379> hincrbyfloat myhash field7 1.1    #为哈希表 key 中的指定字段的浮点数值加上
"9.9"                                              增量 increment
 
 
127.0.0.1:6379> hdel myhash field1 field2    #删除一个或多个哈希表字段
(integer) 2

6.Bitmaps

(1)Bitmaps本身不是一种数据类型,实际上它就是字符串(key-value),但是它可以对字符串的位进行操作

(2)Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一个以位为单位的数组, 数组的每个单元只能存储0和1, 数组的下标在Bitmaps中叫做偏移量

1>setbit

setbit   

这个命令用于设置Bitmaps中某个偏移量的值(0或1),offset偏移量从0开始

127.0.0.1:6379> SETBIT mykey 7 1
(integer) 0
127.0.0.1:6379> SETBIT mykey 7 0
(integer) 1
127.0.0.1:6379> get mykey
"\x00"

2>getbit

getbit  

这个命令用于获取Bitmaps中某个偏移量的值。

127.0.0.1:6379> SETBIT mykey 7 1
(integer) 0
127.0.0.1:6379> GETBIT mykey 0
(integer) 0
127.0.0.1:6379> GETBIT mykey 7
(integer) 1

3>bitcount

bitcount  [start end]

这个命令用于统计字符串被设置为1的bit数。

127.0.0.1:6379> set mykey "foobar"
OK
127.0.0.1:6379> BITCOUNT mykey
(integer) 26
127.0.0.1:6379> BITCOUNT mykey 0 0
(integer) 4
127.0.0.1:6379> BITCOUNT mykey 1 1
(integer) 6
127.0.0.1:6379> BITCOUNT mykey 1 1 byte
(integer) 6
127.0.0.1:6379> BITCOUNT mykey 5 30
(integer) 4
127.0.0.1:6379> BITCOUNT mykey 5 30 bit
(integer) 17

4>bitop

bitop and(or/not/xor)  [key…]

 这个命令是一个复合操作, 它可以做多个Bitmaps的and(交集) 、 or(并集) 、 not(非) 、 xor(异或) 操作并将结果保存在destkey中。

127.0.0.1:6379> set mykey1 "foobar"
OK
127.0.0.1:6379> set mykey2 "abcdef"
OK
127.0.0.1:6379> BITOP and dest mykey1 mykey2
(integer) 6
127.0.0.1:6379> get dest
"`bc`ab"

 7.HyperLogLog(用来做基数统计的算法,HyperLogLog 的优点是:在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且很小)

1>PFADD key element [element ...]

添加指定元素到 HyperLogLog 中

127.0.0.1:6379> PFADD hyper1 "redis"
(integer) 1
127.0.0.1:6379> PFADD hyper1 "mondodb"
(integer) 1
127.0.0.1:6379> PFADD hyper1 "rhce"
(integer) 1

2>PFCOUNT key [key ...]

127.0.0.1:6379> PFCOUNT hyper1 
(integer) 3

3>PFMERGE destkey sourcekey [sourcekey ...]

将多个 HyperLogLog 合并为一个 HyperLogLog

127.0.0.1:6379> PFMERGE hyper1 hyper2
OK
127.0.0.1:6379> PFCOUNT hyper1
(integer) 4

8.Geospatial

Redis 3.2 中增加了对GEO类型的支持。GEO,Geographic,地理信息的缩写。该类型,就是元素的2维坐标,在地图上就是经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作。

127.0.0.1:6379> geoadd geokey 108 54 xian 115 39 beijing    #添加地理位置(经度,纬度,名称)
(integer) 2
 
 
127.0.0.1:6379> geopos geokey xian beijing    #获得指定地区的坐标值
1) 1) "108.00000160932540894"
   2) "53.99999994301438733"
2) 1) "114.99999850988388062"
   2) "38.99999918434559731
127.0.0.1:6379> geodist geokey xian beijing    #获取两个位置之间的直线距离
"1750270.8614"
127.0.0.1:6379> georadius geokey 110 30 1000 km    #以给定的经纬度为中心,找出某一半径内的元
(empty array)                                       素

你可能感兴趣的:(redis,数据库,缓存)