zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

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

Redis学习程序员 详解 数据类型
2023-06-13 09:20:19 时间

该文使用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 

立即查询 

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] 

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 

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 

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 

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 

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 

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 

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

服务器部署程序员系统优化网站设置运维