Redis 学习之数据类型详解程序员

该文使用centos6.5 64位 redis-3.2.8

[[email protected] bin]# netstat -tunpl |grep 6379  查看redis 是否启动成功

一、String类型

String是最简单的类型,一个key对应一个Value,string类型是二进制安全的。redis的string可以包含任何数据类型,比如jpg图片或者序列化的对象。

 

1、set方法:设置key对应的值为string类型的value,如果该key已经存在,则覆盖key对应的value值。所以在redis中key只能有一个。 
127.0.0.1:6379> set name lijie 
2、get:根据key获取value值 
127.0.0.1:6379> get name 
3、Setnx:设置key对应的值为tring类型的value,如果key已经存在,返回0 表示无法再对该key设置新值,返回1 表示设置新值成功,nx是not exit的意思。 
127.0.0.1:6379> setnx name zs 
(integer) 0 
127.0.0.1:6379> setnx age 20 
(integer) 1 
4、setex:设置key对应的值为string类型的value,并指定该key-value对应的有效期。 
127.0.0.1:6379> setex color 10 red 
OK 
立即查询 
127.0.0.1:6379> get color 
"red" 
10秒后查询 
127.0.0.1:6379> get color 
(nil) 
5、Setrange:设置指定key的value值的子字符窜。 
127.0.0.1:6379> set email [email protected] 
OK 
127.0.0.1:6379> get email 
"[email protected]" 
127.0.0.1:6379> setrange email 6 163.com 
(integer) 14 
127.0.0.1:6379> get email 
"[email protected]" 
6、Mset:一次设置多个key-value,返回OK表示全部设置成功,返回0表示全部失败 
127.0.0.1:6379> mset name1 zs name2 ls 
OK 
127.0.0.1:6379> get name1 
"zs" 
127.0.0.1:6379> get name2 
"ls" 
7、msetnx:一次设置多个key-value,返回1表示全部设置成功,返回0表示全部失败。该方式不会覆盖已经存在的key 
127.0.0.1:6379> msetnx name3 kk name4 mm name2 LL 
(integer) 0 
127.0.0.1:6379> get name3 
(nil) 
127.0.0.1:6379> get name4 
(nil) 
8、getset:设置key值,并返回key的旧值 
127.0.0.1:6379> getset name4 UU 
(nil) 
127.0.0.1:6379> get name4 
"UU" 
127.0.0.1:6379> getset name4 RR 
"UU" 
9、getrange:获取key对应value的子字符串 
127.0.0.1:6379> get email 
"[email protected]" 
127.0.0.1:6379> getrange email 0 4 
"jalja" 
10、mget:一次获取多个key对应的value值,不存在返回nil 
127.0.0.1:6379> mget name1 name2 name3 name4 name5 
1) "zs" 
2) "ls" 
3) (nil) 
4) "RR" 
5) (nil) 
11、incr:对key对应的value做加加操作,并返回新值 
127.0.0.1:6379> get age 
"20" 
127.0.0.1:6379> incr age 
(integer) 21 
12、incrby:与incr类似,加指定值,key不存在的时候会设置key,并认为该key原来的value=0 
127.0.0.1:6379> get age 
"21" 
127.0.0.1:6379> incrby age 9 
(integer) 30 
127.0.0.1:6379> incrby age -5 
(integer) 25 
127.0.0.1:6379> incrby height 10 
(integer) 10 
13、decr:对key对应的value做递减操作 
127.0.0.1:6379> get height 
"10" 
127.0.0.1:6379> decr height 
(integer) 9 
127.0.0.1:6379> decr height 
(integer) 8 
14、decrby:对key对应的value减去指定的值 
127.0.0.1:6379> get height 
"8" 
127.0.0.1:6379> decrby height 3 
(integer) 5 
127.0.0.1:6379> decrby height -3 
(integer) 8 
15、append:对key对应的vlaue字符串追加,返回新字符串的长度 
127.0.0.1:6379> get name1 
"zs" 
127.0.0.1:6379> append name1 ML 
(integer) 4 
127.0.0.1:6379> get name1 
"zsML" 
16、strlen:获取key对应value的长度 
127.0.0.1:6379> get name1 
"zsML" 
127.0.0.1:6379> strlen name1 
(integer) 4

 

二、Hash 类型 

Redis hash 是一个string类型的filed和value的映射表、它的添加、删除操作都是0、1(平均操作)。Hash特别适合存储对象。相较于对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便存取整个对象。

1、hset:设置hash filed 为指定值,如果key不存在,则先创建。 
127.0.0.1:6379> hset user:001 name zs 
(integer) 1 
127.0.0.1:6379> hget user:001 name 
"zs" 
设置一个user:001 的用户的name为zs(可以将user:001看做一个表) 
2、 hsetnx:设置hash filed 为指定值,如果key不存在,则先创建。如果存在则返回0表示设置失败。 
127.0.0.1:6379> hsetnx user:001 name ML 
(integer) 0 
127.0.0.1:6379> hsetnx user:001 age 1 
(integer) 1 
3、hmset:同时设置hash的多个file 
127.0.0.1:6379> hmset user:002 name MM age 20 
OK 
127.0.0.1:6379> hget user:002 name 
"MM" 
127.0.0.1:6379> hget user:002 age 
"20" 
4、hmget:获取全部指定的hash filed 
127.0.0.1:6379> hmget user:002 name age 
1) "MM" 
2) "20" 
5、hincrby:对hash filed加上指定的值 
127.0.0.1:6379> hget user:002 age 
"20" 
127.0.0.1:6379> hincrby user:002 age 5 
(integer) 25 
127.0.0.1:6379> hincrby user:002 age -5 
(integer) 20 
6、hexists:测试指定的filed是否存在,返回1表示存在,返回0表示不存在 
127.0.0.1:6379> hexists user:002 name 
(integer) 1 
127.0.0.1:6379> hexists user:002 age 
(integer) 1 
127.0.0.1:6379> hexists user:002 height 
(integer) 0 
7、hlen:返回指定hash的field的数量 
127.0.0.1:6379> hlen user:002 
(integer) 2 
8、hdel 删除指定hash 的filed字段,返回1表示删除成功0:表示删除失败 
127.0.0.1:6379> hget  user:002 age 
"20" 
127.0.0.1:6379> hdel user:002 age 
(integer) 1 
127.0.0.1:6379> hdel user:002 age 
(integer) 0 
127.0.0.1:6379> hget user:002 age 
(nil) 
9、hkeys:返回hash 的所有filed 
127.0.0.1:6379> hkeys user:001 
1) "name" 
2) "age" 
127.0.0.1:6379> hkeys user:002 
1) "name" 
10、hvals:返回hash的所有value 
127.0.0.1:6379> hvals user:001 
1) "zs" 
2) "1" 
127.0.0.1:6379> hvals user:002 
1) "MM"

三、List类型 

List是一个链表结构,主要功能是push、pop,获取一个范围的所有值等等,操作中key理解为链表的名字。Redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push、pop操作链表的头部或者链表尾部添加元素,这样list既可以作为栈,又可以作为队列。

 

1、Lpush:在key对应list的头部添加字符串元素,返回list中元素的个数 
127.0.0.1:6379> lpush list1 "hello" 
(integer) 1 
127.0.0.1:6379> lpush list1 "word" 
(integer) 2 
2、lrange:获取list中的元素, 
127.0.0.1:6379> lrange list1 0 -1(0:第一个,-1:最后一个) 
1) "word" 
2) "hello" 
3、rpush:在key对应的list尾部添加元素 
127.0.0.1:6379> rpush list2 10 
(integer) 1 
127.0.0.1:6379> rpush list2 11 
(integer) 2 
127.0.0.1:6379> lrange list2 0 -1 
1) "10" 
2) "11" 
4、Linsert:在key对应list的特定位置前或后添加字符串 
127.0.0.1:6379> lrange list2 0 -1 
1) "10" 
2) "11" 
127.0.0.1:6379> linsert list2 before 11 10.5 
(integer) 3 
127.0.0.1:6379> lrange list2 0 -1 
1) "10" 
2) "10.5" 
3) "11" 
5、lset:更改list中指定下标的元素,返回ok表示设置成功 
127.0.0.1:6379> lrange list2 0 -1 
1) "10" 
2) "10.5" 
3) "11" 
127.0.0.1:6379> lset list2 1 10.00 
OK 
127.0.0.1:6379> lrange list2 0 -1 
1) "10" 
2) "10.00" 
3) "11" 
6、lrem:从key对应list中删除n个和value相同的元素(n<0 从尾部删除,n=0 全部删除) 
127.0.0.1:6379> lrange list 0 -1 
1) "two" 
2) "one" 
3) "one" 
127.0.0.1:6379> lrem list 1 one 
(integer) 1 
127.0.0.1:6379> lrange list 0 -1 
1) "two" 
2) "one" 
 
7、ltrim:保留list中指定范围的数据 
127.0.0.1:6379> lrange list2 0 -1 
1) "10" 
2) "10.00" 
3) "11" 
4) "12" 
127.0.0.1:6379> ltrim list2 1 2 
OK 
127.0.0.1:6379> lrange list2 0 -1 
1) "10.00" 
2) "11" 
8、lpop:从list的头部删除元素,并返回该元素 
127.0.0.1:6379> lrange list 0 -1 
1) "two" 
2) "one" 
127.0.0.1:6379> lpop list 
"two" 
127.0.0.1:6379> lrange list 0 -1 
1) "one" 
9、rpop:从list尾部删除元素,并返回该元素 
10、rpoplpush:从第一个list的尾部删除元素,并添加到第二个list的头部 
127.0.0.1:6379> lrange list 0 -1 
1) "one" 
127.0.0.1:6379> lrange list1 0 -1 
1) "word" 
2) "hello" 
127.0.0.1:6379> rpoplpush list1 list 
"hello" 
127.0.0.1:6379> lrange list 0 -1 
1) "hello" 
2) "one" 
127.0.0.1:6379> lrange list1 0 -1 
1) "word" 
11、lindex 返回名称为key的list中index位置的元素 
127.0.0.1:6379> lrange list 0 -1 
1) "hello" 
2) "one" 
127.0.0.1:6379> lindex list 1 
"one" 
12、llen:返回指定key对应list的长度 
127.0.0.1:6379> lrange list 0 -1 
1) "hello" 
2) "one" 
127.0.0.1:6379> llen list 
(integer) 2

 

四、Sets类型

 

Set是一个string类型的无序集合,不允许重复。Set是通过hash table实现的。添加、删除、查找的复杂度都是0(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blog的tag功能。

1、 sadd:向key对应的set集合中添加元素,返回1表示添加成功,返回0 表示失败 
127.0.0.1:6379> sadd myset1 one 
(integer) 1 
127.0.0.1:6379> sadd myset1 two 
(integer) 1 
2、Smembers:查看set集合中的元素 
127.0.0.1:6379> smembers myset1 
1) "two" 
2) "one" 
3、srem:删除key对应set集合中的元素,返回1表示删除成功 0表示失败 
127.0.0.1:6379> srem myset1 two 
(integer) 1 
4、spop:随机删除set中的一个元素并返回该元素 
127.0.0.1:6379> smembers myset1 
1) "three" 
2) "one" 
3) "four" 
127.0.0.1:6379> spop myset1 
"four" 
127.0.0.1:6379> smembers myset1 
1) "three" 
2) "one" 
5、sdiff:返回给定set集合的差集 (以在前的set集合为标准) 
127.0.0.1:6379> smembers myset1 
1) "three" 
2) "one" 
127.0.0.1:6379> smembers myset2 
1) "two" 
2) "one" 
127.0.0.1:6379> sdiff myset1 myset2 
1) "three" 
127.0.0.1:6379> sdiff myset2 myset1 
1) "two" 
6、sdiffstore:返回所有给定set集合的差集,并将差集添加到另外一个集合中 
127.0.0.1:6379> smembers myset1 
1) "three" 
2) "one" 
127.0.0.1:6379> smembers myset2 
1) "two" 
2) "one" 
127.0.0.1:6379> sdiffstore myset3 myset1 myset2 
(integer) 1 
127.0.0.1:6379> smembers myset3 
1) "three" 
7、sinter:返回所有给定集合的交集 
127.0.0.1:6379> smembers myset1 
1) "three" 
2) "one" 
127.0.0.1:6379> smembers myset2 
1) "two" 
2) "one" 
127.0.0.1:6379> sinter myset1 myset2 
1) "one" 
8、sinterstore:返回所有给定集合key的交集,并将结果存为另一个key 
127.0.0.1:6379> smembers myset1 
1) "three" 
2) "one" 
127.0.0.1:6379> smembers myset2 
1) "two" 
2) "one" 
127.0.0.1:6379> sinterstore myset4 myset1  myset2 
(integer) 1  
9、返回所有给定集合的并集 
127.0.0.1:6379> smembers myset1 
1) "three" 
2) "one" 
127.0.0.1:6379> smembers myset2 
1) "two" 
2) "one" 
127.0.0.1:6379> sunion myset1 myset2 
1) "three" 
2) "two" 
3) "one" 
10、sunionstore 返回所有给定集合的并集,并将结果存入另一个集合 
127.0.0.1:6379> smembers myset1 
1) "three" 
2) "one" 
127.0.0.1:6379> smembers myset2 
1) "two" 
2) "one" 
127.0.0.1:6379> sunionstore myset5  myset1 myset2 
(integer) 3 
11、smove:从第一个集合中移除元素并将该元素添加到另一个集合中。 
127.0.0.1:6379> smembers myset1 
1) "three" 
2) "one" 
127.0.0.1:6379> smembers myset5 
1) "three" 
2) "two" 
3) "one" 
127.0.0.1:6379> smove myset5 myset1 two 
(integer) 1 
127.0.0.1:6379> smembers myset5 
1) "three" 
2) "one" 
127.0.0.1:6379> smembers myset1 
1) "three" 
2) "two" 
3) "one" 
12、Scard:返回set集合中元素的个数 
127.0.0.1:6379> smembers myset1 
1) "three" 
2) "two" 
3) "one" 
127.0.0.1:6379> scard myset1 
(integer) 3 
13、sismember:测试member元素是否是名称为key的set集合 返回1:表示是 0:不是 
127.0.0.1:6379> smembers myset1 
1) "three" 
2) "two" 
3) "one" 
127.0.0.1:6379> sismember myset1 tree 
(integer) 0 
127.0.0.1:6379> sismember myset1 three 
(integer) 1 
14、srandmember:随机返回set集合中的一个元素,但不删除该元素 
127.0.0.1:6379> smembers myset1 
1) "three" 
2) "two" 
3) "one" 
127.0.0.1:6379>  srandmember myset1 
"one"

五、Sorted set (zset)类型

Sorted set是set的一个升级版,他在set的基础上增加了一个顺序属性,这一属性在添加元素的时候可以指定,每次指定后,zset会自动重新按新的值挑战顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作key理解为zset的名字
1、zadd:向有序集合zset中添加元素并指定顺序,如果该元素已存在就更新元素顺序。 
127.0.0.1:6379> zadd myzset1 1 one 
(integer) 1 
127.0.0.1:6379> zadd myzset1 2 two 
(integer) 1 
2、zrange:从zset集合中取元素 [withscores] 输出元素顺序号 
127.0.0.1:6379> zadd myzset1 1 one 
(integer) 1 
127.0.0.1:6379> zadd myzset1 2 two 
(integer) 1 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "one" 
2) "1" 
3) "two" 
4) "2" 
3、zrem:删除zset集合中指定的元素 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "one" 
2) "1" 
3) "two" 
4) "2" 
127.0.0.1:6379> zrem myzset1 two 
(integer) 1 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "one" 
2) "1" 
4、zincrby:若zset中已经存在元素member、则该元素的score增加incrment否则向该集合中添加该元素,其score的值为increment 
例:改变myset1中one元素的顺序值 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "one" 
2) "1" 
127.0.0.1:6379> zincrby myzset1 2 one 
"3" 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "one" 
2) "3" 
5、zrank:返回zset中元素member的排名(score从小到大排序)即下标 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "one" 
2) "3" 
3) "four" 
4) "4" 
5) "five" 
6) "5" 
127.0.0.1:6379> zrank myzset1 four 
(integer) 1 
6、zrevrank:返回zset集合中member元素的排名(按照score倒叙)即下标 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "one" 
2) "3" 
3) "four" 
4) "4" 
5) "five" 
6) "5" 
127.0.0.1:6379> zrevrank myzset1 four 
(integer) 1 
127.0.0.1:6379> zrevrank myzset1 five 
(integer) 0 
7、zrevrange:从zset集合中倒叙(score倒叙)获取元素 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "one" 
2) "3" 
3) "four" 
4) "4" 
5) "five" 
6) "5" 
127.0.0.1:6379> zrevrange myzset1 0 -1 withscores 
1) "five" 
2) "5" 
3) "four" 
4) "4" 
5) "one" 
6) "3" 
8、zrangebyscore:从zset集合中根据score顺序获取元素 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "one" 
2) "3" 
3) "four" 
4) "4" 
5) "five" 
6) "5" 
127.0.0.1:6379> zrangebyscore  myzset1 4 5 withscores 
1) "four" 
2) "4" 
3) "five" 
4) "5" 
9、zcount:返回集合中score在给定区间的数量 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "one" 
2) "3" 
3) "four" 
4) "4" 
5) "five" 
6) "5" 
127.0.0.1:6379> zcount myzset1 3 4 
(integer) 2 
10:zcard:返回zset集合中所有元素个数 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "one" 
2) "3" 
3) "four" 
4) "4" 
5) "five" 
6) "5" 
127.0.0.1:6379> zcard myzset1 
(integer) 3 
11、zremrangebyrank:删除集合中排名(下标)在给定区间的元素 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "one" 
2) "3" 
3) "four" 
4) "4" 
5) "five" 
6) "5" 
127.0.0.1:6379> zremrangebyrank myzset1 1 2 
(integer) 2 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "one" 
2) "3" 
12、zremrangebyscore::删除集合中顺序(score值)在给定区间的元素 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "one" 
2) "3" 
3) "four" 
4) "4" 
5) "five" 
6) "5" 
127.0.0.1:6379> zremrangebyscore myzset1 3 4 
(integer) 2 
127.0.0.1:6379> zrange myzset1 0 -1 withscores 
1) "five" 
2) "5"

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/6394.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论