Redis五大数据类型
1.Redis五大基本类型
1.官方说明
2.String字符串类型
String是redis最基本的类型,可以理解成Memcached一模一样的类型,一个key对应一个value
String类型是二进制安全的,意思是redis的String可以包含任何数据,比如jpg图片或者序列化对象
String类型是redis最基本的数据类型,一个redis中字符串value最多可以使512M
3.Hash哈希,类似java中的Map
Redis hash是一个键值对集合
Redis hash是一个String类型的filed和value的映射表,hash特别适合用于存储对象
Redis hash类似java里面的Map<String,Object>
4.List列表
Redis列表是最简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)
Redis列表的底层实际是个链表
5.Set集合
Redis的Set集合是String的无序集合,通过HashTable实现的
6.Zset有序集合
Redis Zset和set一样,是String类型的集合,不允许重复的成员
不同的是每个元素都会关联一个double类型的分数
Redis是通过分数来为集合中的成员进行性从小到大的排序,Zset的成员是唯一的,但是分数Sorce确可以重复
2.Redis键(Key)
1 [root@iZ2zeg6rjsjbfv9ibttfdnZ bin]# redis-server dzredis/redis.conf #####连接redis服务器 2 11705:C 19 Aug 2020 15:04:07.798 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 3 11705:C 19 Aug 2020 15:04:07.798 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=11705, just started 4 11705:C 19 Aug 2020 15:04:07.798 # Configuration loaded 5 [root@iZ2zeg6rjsjbfv9ibttfdnZ bin]# redis-cli -p 6379 #####连接redis客户端 端口号6379 6 127.0.0.1:6379> keys * ######查看所有的key 7 (empty array) 8 127.0.0.1:6379> set name dz ######set设置key和value值 9 OK 10 127.0.0.1:6379> get name ########根据key值获取value值 11 "dz" 12 127.0.0.1:6379> exists name ######exist key的名字,判断这个key是否存在 13 (integer) 1 14 127.0.0.1:6379> exists name1 15 (integer) 0 16 127.0.0.1:6379> move name 1 ######当前库没有了,被移除了 17 (integer) 1 18 127.0.0.1:6379> keys * 19 (empty array) 20 127.0.0.1:6379> set name dz 21 OK 22 127.0.0.1:6379> expire name 10 #####expire key秒钟:为给定的key设置生存时间,当key过期时,他就会自动删除 23 (integer) 1 24 127.0.0.1:6379> ttl name ########ttl key查看还有多少秒过期,-1表示永不过期,-2表示已经过期 25 (integer) 8 26 127.0.0.1:6379> ttl name 27 (integer) 6 28 127.0.0.1:6379> ttl name 29 (integer) 5 30 127.0.0.1:6379> ttl name 31 (integer) 4 32 127.0.0.1:6379> ttl name 33 (integer) 2 34 127.0.0.1:6379> ttl name 35 (integer) 1 36 127.0.0.1:6379> ttl name #########生存时间0 37 (integer) 0 38 127.0.0.1:6379> ttl name 39 (integer) -2 40 127.0.0.1:6379> ttl name 41 (integer) -2 42 127.0.0.1:6379> keys * 43 (empty array) 44 127.0.0.1:6379> set name dz 45 OK 46 127.0.0.1:6379> get name 47 "dz" 48 127.0.0.1:6379> type name ###########查看key是什么类型 49 string
3.字符串Sring
单值单value
1 ################################## 2 #### set get del append strlen#### 3 ################################## 4 127.0.0.1:6379> set key1 value1 ####设置值 5 OK 6 127.0.0.1:6379> get key1 ########获取值 7 "value1" 8 127.0.0.1:6379> del key1 #######删除值 9 (integer) 1 10 127.0.0.1:6379> keys * ##########查看全部的key 11 (empty array) 12 127.0.0.1:6379> exists key1 ########确定key1不存在 13 (integer) 0 14 127.0.0.1:6379> append key1 hello #######对不存在的key进行append拼接,等同于set key1 hello 15 (integer) 5 #########字符长度 16 127.0.0.1:6379> append key1 23333 #########对存在的字符串进行拼接 17 (integer) 10 #########字符长度从5变成了10 18 127.0.0.1:6379> get key1 19 "hello23333" 20 127.0.0.1:6379> strlen key1 #########获取字符串的长度 21 (integer) 10
1 ############################################################ 2 # incr、decr类型一定要是数字才可以,进行自增和自减操作,+1,-1 3 ############################################################ 4 # incrby,decrby 命令将key中存储的数字加上或者减去指定的增(减)量值 5 ############################################################ 6 ############################################################ 7 127.0.0.1:6379> set view 0 8 OK 9 127.0.0.1:6379> incr view #####浏览+1 10 (integer) 1 11 127.0.0.1:6379> incr view 12 (integer) 2 13 127.0.0.1:6379> decr view ###########浏览-1 14 (integer) 1 15 127.0.0.1:6379> incrby view 10 ########+10 16 (integer) 11 17 127.0.0.1:6379> decrby view 10 ########-10 18 (integer) 1
1 ################################################################### 2 #range范围 3 #getrange获取指定区间范围内的值,类似between...and的关系,从零到-1表示全部 4 ################################################################### 5 127.0.0.1:6379> set key abcd123456 6 OK 7 127.0.0.1:6379> getrange key 0 -1 ########获取全部的值 8 "abcd123456" 9 127.0.0.1:6379> getrange key 0 2 ##########截取部分字符串 10 "abc"
1 # =================================== 2 # setrange 设置指定区间范围内的值,格式是setrange key值 具体值 # 3 #==================================== 4 redis 127.0.0.1:6379> set key2 abcd123456 5 OK 6 redis 127.0.0.1:6379> get key2 7 "abcd123456" 8 redis 127.0.0.1:6379> SETRANGE key2 1 x 9 (integer) 10 10 redis 127.0.0.1:6379> get key2 11 "axcd123456"
1 ##setex(set with expire)键秒值 2 redis 127.0.0.1:6379> setex key3 60 expire ##设置过期时间 3 OK 4 redis 127.0.0.1:6379> ttl key3 ###查看剩余的时间 5 (integer) 54 6 redis 127.0.0.1:6379> ttl key3 7 (integer) 53 8 redis 127.0.0.1:6379> ttl key3 9 (integer) 51 10 ###setnx(set if not exist) 11 redis 127.0.0.1:6379> setnx mykey "redis" ###如果不存在就设置 12 (integer) 1 #####成功返回1 13 redis 127.0.0.1:6379> setnx mykey "dz" ####如果存在就设置,失败返回0 14 (integer) 0 15 redis 127.0.0.1:6379> get mykey 16 "redis"
1 redis 127.0.0.1:6379> flushdb ###清空数据库 2 OK 3 redis 127.0.0.1:6379> keys * 4 (empty list or set) 5 redis 127.0.0.1:6379> mset k10 v10 k11 v11 k12 v12 6 OK ###mset命令用于同时设置一个或多个key-value对 7 redis 127.0.0.1:6379> keys * 8 1) "k10" 9 2) "k11" 10 3) "k12" 11 redis 127.0.0.1:6379> mget k10 k11 k12 k13 ###mget命令返回所有(一个或多个)给定key值 12 1) "v10" 13 2) "v11" 14 3) "v12" 15 4) (nil) ####如果给定的key里面,有某个key不存在,那么这个key返回特殊值为nil 16 redis 127.0.0.1:6379> msetnx k10 v10 k15 v15 ###原子操作 17 (integer) 0 ####msetnx当所有key都设置成功,返回1,如果所有给定key都设置失败(至少有一个key已存在),那么返回0 18 redis 127.0.0.1:6379> get k15 19 (nil)
缓存对象
1 redis 127.0.0.1:6379> mset user:1:name dz user:1:age 2 2 OK 3 redis 127.0.0.1:6379> mget user:1:name user:1:age 4 1) "dz" 5 2) "2"
getset(先get在set)
redis 127.0.0.1:6379> flushdb
OK
redis 127.0.0.1:6379> getset db mongodb ####没有旧值,返回nil
(nil)
redis 127.0.0.1:6379> get db
"mongodb"
redis 127.0.0.1:6379> getset db redis #####有旧值就返回旧值
"mongodb"
redis 127.0.0.1:6379> get db
"redis"
String数据结构是简单的key-value类型,value其实不仅可以使String,也可以使数字
常规key-value缓存应用
常规计数:微博数,粉丝数等
4.列表List
单值多Value
Lpush:将一个或多个值插入到列表头部(左)
rpush:将一个或多个值插入到列表尾部(右)
lrange:返回列表中制定区间内的元素,区间以偏移量start 和 end 指定
其中0表示第一个元素,1表示第二个元素,-1表示最后一个元素,-2表示列表的倒数第二个元素,以此类推
1 redis 127.0.0.1:6379> flushdb 2 OK 3 redis 127.0.0.1:6379> LPUSH list "one" 4 (integer) 1 5 redis 127.0.0.1:6379> LPUSH list "two" 6 (integer) 2 7 redis 127.0.0.1:6379> RPUSH list "right" 8 (integer) 3 9 redis 127.0.0.1:6379> Lrange list 0 -1 10 1) "two" 11 2) "one" 12 3) "right" 13 redis 127.0.0.1:6379> Lrange list 0 1 14 1) "two" 15 2) "one"
lpop命令用于移除并返回列表的第一个元素。
当列表key不存在时,返回nil
rpop移除列表的最后一个元素,返回值为移除的元素
1 redis 127.0.0.1:6379> lpop list 2 "two" ####移除的元素值为two 3 redis 127.0.0.1:6379> rpop list 4 "right" 5 redis 127.0.0.1:6379> lrange list 0 -1 6 1) "one"
lindex按照索引下标获取元素(-1代表最后一个,0代表是第一个)
1 redis 127.0.0.1:6379> lindex list 1 2 (nil) 3 redis 127.0.0.1:6379> lindex list 0 4 "one" 5 redis 127.0.0.1:6379> lindex list -1 6 "one"
llen用于返回列表的长度
1 redis 127.0.0.1:6379> flushdb 2 OK 3 redis 127.0.0.1:6379> lpush list "one" 4 (integer) 1 5 redis 127.0.0.1:6379> lpush list "two" 6 (integer) 2 7 redis 127.0.0.1:6379> lpush list "three" 8 (integer) 3 9 redis 127.0.0.1:6379> llen list ####返回列表长度 10 (integer) 3
1212121