Redis数据类型详解

因为mysql中以二维表格的形式保存数据(限制了各种数据类型表现方式)
但redis这种nosql根据不同的数据类型有不同的表现方式

一、String数据类型

概述:

String是redis 最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等

1. set/get/append/strlen

set key value:修改键值
get key:获取键值

append key value:追加键值,并返回追加后的长度(若键不存在,则相当于创建)
strlen key:判断字符串的长度

//set
127.0.0.1:6379> set k1 1	//set创建键
OK
127.0.0.1:6379> keys *	//查看当前数据库所有键
1) "k2"
2) "k3"
3) "xzw"
4) "k1"
//get
127.0.0.1:6379> get k1	//get查看键值
"1"
//append
127.0.0.1:6379> append k1 2		//追加键值,如果键存在就追加,不存在就新建
(integer) 2
127.0.0.1:6379> get k1
"12"
127.0.0.1:6379> append h1 2
(integer) 1
127.0.0.1:6379> get h1
"2"
//strlen
127.0.0.1:6379> strlen k1	//判断键的长度
(integer) 2

127.0.0.1:6379> exists k1 //判断键值是否存在
(integer) 1 //存在为1
127.0.0.1:6379> exists h1
(integer) 0 //不存在为0

2.INCR/ DECR/ I NCRBY/ DECRBY

INCR key: key值递增指定的整数
DECR key: key值递减指定的整数

127.0.0.1:6379> get k2
"2"
127.0.0.1:6379> incr k2		//k2自增1
(integer) 3
127.0.0.1:6379> get k2
"3"
127.0.0.1:6379> decr k2		//k2自减1
(integer) 2
127.0.0.1:6379> get k2
"2"

incrby key increment ##键增加指定的整数
decrby key decrement ##键减少指定的整数

127.0.0.1:6379> get k1
"12"
127.0.0.1:6379> incrby k1 3		//指定k1增加3
(integer) 15
127.0.0.1:6379> get k1
"15"
127.0.0.1:6379> decrby k1 5		//指定k1自减5
(integer) 10
127.0.0.1:6379> get k1
"10"

3.GETSET

getset key value ##获取key值并返回,同时给key设置新值

127.0.0.1:6379> getset k1 1		//先读取kl的值为10,再返回值1
"10"
127.0.0.1:6379> get k1		//get获取的是新值
"1"

4. setex

setex key seconds value:设置指定key的过期时间为seconds;ex:最大

127.0.0.1:6379> setex k10 5 10		//设置k10的过期时间为5s
OK
127.0.0.1:6379> ttl k10
(integer) -2		//-2表示已经过期,-1表示永不过期
127.0.0.1:6379> get k10
(nil)

5.setnx

setnx key value: 不存在键的话执行set操作返回值1,存在的话不执行修改,返回值0

127.0.0.1:6379> setnx k1 1		//修改kl键值为1,不存在则修改返回值1
(integer) 0
127.0.0.1:6379> get k1
"1"
127.0.0.1:6379> setnx k10 1
(integer) 1

6.MSET/MGET/MSETNX

m:批量
mset key value [key value …] ##批量设置键值对
mget key [key …] ##批量获取键值对
msetnx key value [key value …] ##批量设置键值对,键都不存在就执行并返回1;只要有一个键存在就不执行并返回0

127.0.0.1:6379> mset n1 1 n2 2 n3 3		//批量设置键值
OK
127.0.0.1:6379> mget n1 n2 n3		//批量获取键值
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> msetnx n1 10 n2 20 n3 30
(integer) 0
127.0.0.1:6379> mget n1 n2 n3
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> msetnx n10 10 n20 20
(integer) 1
127.0.0.1:6379> msetnx n10 10 n20 20 n3 30		//批量设置了n10,n20键值,因为n3键已存在,所以msetnx命令执行不成功返回0
(integer) 0
//防止误操作修改已经存在的键值

二、List数据类型

概述:列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素

1.LPUSH/LPUSHX/LRANGE

lpush key value [value …] ##在头部(左侧)依次插入列表元素;l:left
lpushx key value ##键必须存在才能执行,在头部插入元素值并返回列表元素数量;l:left;0:代表索引下标,第一个元素;-1:最大值,最后一个元素
lrange key start stop ##取从位置索引start到位置索引stop的所有元素( 索引以0开始);L:list

127.0.0.1:6379> lpush m1 a b c d	//在m1键值a的左侧插入d,c,b
(integer) 4
127.0.0.1:6379> lrange m1 0 -1		//查询整个列表;0:第一个元素;-1:最后一个元素
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lrange m1 0 2		//查询m1前三个元素
1) "d"
2) "c"
3) "b"
127.0.0.1:6379> lrange m1 0 1000	//当查询超过list元素个数时指挥显示全部元素
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lpushx m1 e		//#在左侧插入元素e,返回元素的数量
(integer) 5
127.0.0.1:6379> lrange m1 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"

2.LPOP/LLEN

lpop key ##移除并返回键的第一个元素,即从右往左第一个
llen key ##获取表中元素数量

127.0.0.1:6379> lpop m1		//移除并返回键的第一个元素
"e"
127.0.0.1:6379> llen m1		//在执行lpop命令一次后,链表头部的元素已经被移除,此时链表中元素的数量是4
(integer) 4

3.LREM/LSET/LINDEX/LTRIM

lrem key count value ##从列表头部开始删除count个值为value的元素,并返回实际删除数量

127.0.0.1:6379> lrange m1 0 -1
1) "b"
2) "a"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lrem m1 2 c		//删除m1键2个c,只有1个就删除1个,并返还删除个数
(integer) 1
127.0.0.1:6379> lrange m1 0 -1
1) "b"
2) "a"
3) "d"
4) "b"
5) "a"

lset key index value ##将位置索引为index的元素设置新值value
lindex key index ##获取索引为index的元素
ltrim key start stop ##仅保留从位置索引start到索引stop的元素

127.0.0.1:6379> lset m1 2 1		//将位置为2的元素修改为1
OK
127.0.0.1:6379> lrange m1 0 -1
1) "b"
2) "a"
3) "1"
4) "b"
5) "a"
127.0.0.1:6379> lindex m1 2		//获取索引为2的元素
"1"
127.0.0.1:6379> ltrim m1 0 2		//仅保留索引值0-2中间的元素
OK
127.0.0.1:6379> lrange m1 0 -1
1) "b"
2) "a"
3) "1"

4.LINSERT

LINSERT key BEFORE|AFTER pivot value: 在元素pivot的前面(做左)或后面(右)插入新元素value

127.0.0.1:6379> lpush m1 a b c d e
(integer) 5
127.0.0.1:6379> linsert m1 before b 2	//在元素b前面插入2
(integer) 6
127.0.0.1:6379> lrange m1 0 -1
1) "e"
2) "d"
3) "c"
4) "2"
5) "b"
6) "a"
127.0.0.1:6379> linsert m1 after c 3	//在元素c后面插入3
(integer) 7
127.0.0.1:6379> lrange m1 0 -1
1) "e"
2) "d"
3) "c"
4) "3"
5) "2"
6) "b"
7) "a"
127.0.0.1:6379> linsert m1 after f 6	//为不存在的键插入新元素,linsert命令操作失败,返回-1
(integer) -1
127.0.0.1:6379> linsert m2 after f 6	//为不存在的键插入新元素,linsert命令操作失败,返回0
(integer) 0

5.BPUSH/ RPUSHX/RPOP/RPOPLPUSH

rpush key value [value …] ##在列表的尾部依次插入value;l:list
rpushx key value ##key必须存在才可执行,将value从尾部插入,并返回所有元素数量
rpop key ##在尾部弹出(移除)一个元素,并返回该元素
rpoplpush source destination ##在key1的尾部弹出一个元素并返回,将它插入key2的头部

127.0.0.1:6379> lrange m1 0 -1
1) "e"
2) "d"
3) "c"
4) "3"
5) "2"
6) "b"
7) "a"
127.0.0.1:6379> rpush m1 f		//在尾部插入f,并返回元素数量
(integer) 8
127.0.0.1:6379> lrange m1 0 -1
1) "e"
2) "d"
3) "c"
4) "3"
5) "2"
6) "b"
7) "a"
8) "f"
127.0.0.1:6379> rpop m1		//移除并返回m1键的第一个元素
"f"
127.0.0.1:6379> rpoplpush m1 m2		//将m1键的尾部元素弹出插入到m2键的首部
"a"
127.0.0.1:6379> lrange m2 0 -1
1) "a"

三、Hash数据类型(散列类型)

概述:

hash用于存储对象。可以采用这样的命名方式(hash格式) :对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。
如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。

1.HSET/HGET/HDEL/HEXISTS/HLEN/HSETNX

常用格式

hset key field value		##设置键值对;h:哈希数据类型;field:字段
hget key field			##查询键的值
hdel key field [field ...]		##删除键中字段名为field的字段,删除成功返回1;不成功返回0
hexists key field	#判断键中是否存在字段名为field的字段,若存在返回值为1,不存在返回0
hlen key		###获取键的字段数量
hsetnx key field value	##添加新字段field和值,字段不存在添加成功返回1,字段存在未添加成功返回0

实例

127.0.0.1:6379> hset x1 filed1 zhangsan		//设置x1键字段field1的值为"zhangsan"
(integer) 1
127.0.0.1:6379> hget x1 filed1		//获取键值为x1,字段为filed1的值
"zhangsan"
127.0.0.1:6379> hset x1 filed2 lisi
(integer) 1
127.0.0.1:6379> hlen x1		//获取x1的字段数量;返回2
(integer) 2
127.0.0.1:6379> hexists x1 filed1	//查询x1键内存在字段field1,返回1
(integer) 1
127.0.0.1:6379> hexists x1 filed3		//如果不存在则返回0
(integer) 0
127.0.0.1:6379> hdel x1 filed2		//删除x1键的field字段
(integer) 1
127.0.0.1:6379> hget x1 filed2
(nil)
127.0.0.1:6379> hsetnx x1 filed2 lisi		//x1键字段field2不存在,未添加成功返回1
(integer) 1
127.0.0.1:6379> hget x1 filed2
"lisi"
127.0.0.1:6379> hsetnx x1 filed1 lisi		//x1键字段field1存在,未添加未成功返回0
(integer) 0

2.HINCRBY

常用格式

hincrby key field increment		##指定键的字段自增/自减

实例

127.0.0.1:6379> hset xx1 filed1 5		//设置字段为filed1的值为5
(integer) 1
127.0.0.1:6379> hincrby xx1 filed1 5		//使其增加5
(integer) 10
127.0.0.1:6379> hget xx1 filed1
"10"
127.0.0.1:6379> hincrby xx1 filed1 -2		//使其减少2
(integer) 8
127.0.0.1:6379> hget xx1 filed1
"8"

3.HGETALL/HKEYS/HVALS/HMGET/HMSET

常用格式

hgetall key		##获取所有键值对
hkeys key		##获取键内所有字段
hvals key		##获取键的字段值
hmget key field [field ...]	##获取键指定字段的值
hmset key field value [field value ...]	##批量设置键指定字段的值

实例

127.0.0.1:6379> hmset x2 filed1 1 name zhangsan add nanjing 	//修改x1键的filed1字段值为1,name字段值为zhangsan,add字段值为nanjing;返回值为字段数量
OK
127.0.0.1:6379> hgetall x2		//获取所有键值对
1) "filed1"
2) "1"
3) "name"
4) "zhangsan"
5) "add"
6) "nanjing"
127.0.0.1:6379> hkeys x1	//获取x1键的所有字段
1) "filed1"
2) "name"
3) "add"
127.0.0.1:6379> hmget x2 filed1 name add age	//获取x2键的字段的值,没有的字段返回nil
1) "1"
2) "zhangsan"
3) "nanjing"
4) (nil)
127.0.0.1:6379> hvals x2	//获取x2键的字段值
1) "1"
2) "zhangsan"
3) "nanjing"

四、set数据类型(无序集合)

概述

元素类型为string类型, 元素具有唯一性,
不允许存在重复的成员。多个集合类型之间可以进行并集、交集和差集运算
应用范围:
1、可以使用Redis的Set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。对于此场景,我们仅需在每次访问该博客时将访问者的IP存入Redis中,Set数据类型会自动保证IP地址的唯一性。
2、充分利用Set类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户ID被存储在一个指定的Set中, 而购买另外一种电子产品的客户ID被存储在另外一个Set中,如果此时我们想获取有哪些客户同时购买了这两种商品时,Set的intersections 命令就可以充分发挥它的方便和效率的优势了。

1、SADD/SMEMBERS/SCARE/SISMEMBER

sadd key member [member ...]	##添加键和元素;若元素已存在不会重复添加
smembers key		##查看指定键的成员
scard key	##查看指定键的元素个数
sismember key member	##判断元素是否存在,存在返回1,不存在返回0

SCARE:元素数量
SISMEMBER:判断该无序集合中成员是否存在

实例

127.0.0.1:6379> sadd p1 1 2 3 4		//添加p1键的元素1234
(integer) 4
127.0.0.1:6379> sadd p1 4 5 6 7		//添加p1键的元素4567,返回值为3,因为4已存在,不会重复添加
(integer) 3
127.0.0.1:6379> smembers p1		//查看指定p1键的成员
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
127.0.0.1:6379> sismember p1 2		//查询p1键的元素2,存在返回1;不存在返回0
(integer) 1
127.0.0.1:6379> sismember p1 8
(integer) 0
127.0.0.1:6379> scard p1		//查看p1键的元素个数
(integer) 7

2、SPOP/SREM/SRANDMEMBER/SMOVE

spop key [count]		##随机移除键的指定数量的元素,不加数量默认1
srem key member [member ...]		##移除键的指定成员
smembers key		##查看指定键的所有成员
srandmember key [count]	##随机返回一个成员
smove source destination member	##可以把无序集合中的元素移动到另一个无须集合

实例

127.0.0.1:6379> srandmember p1 1	//随机弹出一个p1键的值
1) "3"
127.0.0.1:6379> srandmember p1 2	//随机弹出2个p1键的值
1) "1"
2) "6"
127.0.0.1:6379> spop p1		//指定p1键弹出1位成员并移除
"6"
127.0.0.1:6379> smembers p1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "7"	
127.0.0.1:6379> srem p1 1 2		//移除p1键的成员1 2
(integer) 2
127.0.0.1:6379> smembers p1
1) "3"
2) "4"
3) "5"
4) "7"
127.0.0.1:6379> smove p1 p2 5	//将p1的5移动到p2中
(integer) 1
127.0.0.1:6379> smembers p2
1) "5"

五、Sorted Set数据类型(zset、 有序集合)

概述:

  • 有序集合,元素类型为Sting, 元素具有唯一 性,不能重复。
  • 每个元素都会关联一个double类型的分数score(表示权重),可以通过权重的大小排序,元素的score可以相同。
  • 应用范围:
    可以用于一个大型在线游戏的积分排行榜。每当玩家的分数发生变化时,可以执行ZADD命令更新玩家的分数,此后再通过ZRANGE命令获取积分TOP10的用户信息。当然我们也可以利用ZRANK命令通过username来获取玩家的排行信息。最后我们将组合使用ZRANGE和ZRANK命令快速的获取和某个玩家积分相近的其他用户的信息。
    Sorted-Set类型还可用于构建索引数据。

1.ZADD/ZCARD/ZCOUNT/ZREM/ZINCRBY/ZSCORE/ZRANGE/ZRANK

常用格式:

zadd key [NX|XX] [CH] [INCR] score member [score member ...]	##添加指定键的成员的分数
zcard key 		##返回指定键的成员数量
zcount key min max	##返回符合筛选权重的成员数量
zrem key member [member ...]	##指定删除1/多个成员,返回实际删除的数量
zincrby key increment member	##指定自增分数,返回该成员更新后的分数;初始分数为0
zscore key member	##查询指定的成员分数,返回值为字符串形式
zrange key start stop [WITHSCORES]		##查询键指定位置的成员和分数;0:第一个;-1:最后一个;withscores:返回的结果中包含每个成员及其分数,否则值返回成员
zrank key member		##查询键指定成员的索引

实例

127.0.0.1:6379> zadd s1 80 zhangsan		//添加s1键的zhangsan的分数为80
(integer) 1
127.0.0.1:6379> zadd s1 89 lisi 91 wangwu	//批量添加
(integer) 2
127.0.0.1:6379> zrange s1 0 -1	//查询s1键的成员
1) "zhangsan"
2) "lisi"
3) "wangwu"

127.0.0.1:6379> zrange s1 0 -1 withscores		//查询s1键的成员和分数
1) "zhangsan"
2) "80"
3) "lisi"
4) "89"
5) "wangwu"
6) "91"
127.0.0.1:6379> zrank kl lisi		//返回s1键成员lisi的索引
(integer) 0
127.0.0.1:6379> zcard kl		//返回s1键的成员数量
(integer) 3
127.0.0.1:6379> zcount s1 80 90		//返回s1键的分数符合80≤score≥90的成员数量
(integer) 2
127.0.0.1:6379> zrem s1 1 zhangsan		//指定删除成员
(integer) 1
127.0.0.1:6379> zscore s1 lisi		//查看指定成员的分数
"89"

2.ZRANGE BY SCORE/ZREM RANGE BYRANK/ZREM RANGE BY SCORE

常用格式

zrangebyscore key min max [WITHSCORES] [LIMIT offset count]	##获取分数满足表达式的成员
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]	##指定分数范围删除
zremrangebyrank key start stop	##删除满足范围位置索引

实例

127.0.0.1:6379> zrangebyscore s1 80 90		//获取分数满足表达式80 <=score <= 90的成员
1) "lisi"
127.0.0.1:6379> zrangebyscore s1 (80 (90		//获取分数满足表达式80 <score < 90的成员
1) "lisi"
127.0.0.1:6379> zrangebyscore s1 -inf +inf limit 1 2
//-inf:第一 个成员(位置索引值最低的,即0),+inf:最后一个成员(位置索引值最高的),limit后面的参数用于限返回成员的值,2表示从位置索引等于2的成员开始,取后而3个成员
1) "wangwu"
127.0.0.1:6379> zremrangebyscore s1 1 2		//删除索引值在1-2的成员
(integer) 0
127.0.0.1:6379> zrange zset 0 -1   //查看所有成员
1) "three"
127.0.0.1:6379> ZREMRANGEBYRANK s1 0 1  //删除索引值在0-1的成员
(integer) 1
127.0.0.1:6379> ZREMRANGEBYRANK s1 0 1
(integer) 0
127.0.0.1:6379> zcard s1   //查看成员数量
(integer) 0

3.ZREVRANGE/ZREVRANGEBYSCORE/ZREVRANK

常用格式

zrevrange key start stop [WITHSCORES]		##以位置索引从高到低的方式获取并返回此区间内的成员
zrevrank key member	##输出指定成员的位置/索引
zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]	##基于分数/权重,并在满足的范围内排序,默认从大到小

实例

127.0.0.1:6379> zadd a1 1 one 2 two 3 three 4 four
(integer) 4
127.0.0.1:6379> zrevrange a1 0 -1 withscores	//返回a1键的索引的成员和分数,从高到低排队
1) "four"
2) "4"
3) "three"
4) "3"
5) "two"
6) "2"
7) "one"
8) "1"
127.0.0.1:6379> zrevrange a1 1 3	//返回索引值在1-3的成员
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> zrevrank a1 two		//由于是从高到低的排序,所以two的位置/索引下标是2
(integer) 2
127.0.0.1:6379> zrevrangebyscore a1 3 1		//获取分数满足1≤score≥3,并从高到低输出
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> zrevrangebyscore a1 4 0 limit 1 2		//满足分数4-0,且索引值从1开始的成员
1) "three"
2) "two"
127.0.0.1:6379> zrevrangebyscore a1 +inf -inf limit 1 3		//全部成员在索引值为1开始的后三位成员
1) "three"
2) "two"
3) "one"

小结

五种数据类型查询命令

redis:存/取

list列表查询
lrange key start stop (0 -1)

string字符串
get 单个获取
mget 批量获取

hash散列类型
hget 查询指定hash的指定字段的值
hgetall 查询指定hash的所有字段的值
hmget 批量查询指定hash的指定字段的值
hkeys 查询指定hash的字段名
hvals 查询指定hash的值

set无序集合
smembers key

zset有序集合
zrange key start stop (0 -1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值