本文最后更新于:2021年11月14日 下午
Redis数据类型 一.String字符串类型 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 ########################################################################127.0 .0 .1 :6379 > keys * (empty array)127.0 .0 .1 :6379 > set key1 v1 #设置key1的值为v1 OK127.0 .0 .1 :6379 > get key1 #获取key1的值"v1" 127.0 .0 .1 :6379 > exists key1 #判断是否存在名为key1的键 (integer) 1 127.0 .0 .1 :6379 > append key1 "hello" #在key1上追加字符串,若key不存在,相当于set key value (integer) 7 127.0 .0 .1 :6379 > keys *1 ) "key1" 127.0 .0 .1 :6379 > append key2 "abcde" #key2不存在,因此新建key2,并设置value (integer) 5 127.0 .0 .1 :6379 > keys *1 ) "key2" 2 ) "key1" 127.0 .0 .1 :6379 > strlen key1 #获取key的长度 (integer) 7 127.0 .0 .1 :6379 > append key1 "12345" (integer) 12 127.0 .0 .1 :6379 > strlen key1 (integer) 12 127.0 .0 .1 :6379 > get key1"v1hello12345" #########################################################################127.0 .0 .1 :6379 > set views 0 OK127.0 .0 .1 :6379 > get views"0" 127.0 .0 .1 :6379 > incr views #自增1 (integer) 1 127.0 .0 .1 :6379 > get views"1" 127.0 .0 .1 :6379 > decr views (integer) 0 127.0 .0 .1 :6379 > get views"0" 127.0 .0 .1 :6379 > decr views #自减1 (integer) -1 127.0 .0 .1 :6379 > get views"-1" 127.0 .0 .1 :6379 > incrby views 10 #设置步长,相当于views = views+10 (integer) 9 127.0 .0 .1 :6379 > get views"9" 127.0 .0 .1 :6379 > decrby views 8 #设置步长,相当于views = views-10 (integer) 1 127.0 .0 .1 :6379 > get views"1" ################################################################ #获取一个字符串指定范围的字串 getrange key start end 127.0 .0 .1 :6379 > set key1 helloworld OK127.0 .0 .1 :6379 > get key1"helloworld" 127.0 .0 .1 :6379 > getrange key1 0 3 #截取字串[0 ,3 ]"hell" 127.0 .0 .1 :6379 > getrange key1 0 -1 "helloworld" #替换指定范围的字串 setrange key offset new_value 从指定的偏移量开始将key的值替换为new_value127.0 .0 .1 :6379 > set key2 abcdefg OK127.0 .0 .1 :6379 > get key2"abcdefg" 127.0 .0 .1 :6379 > setrange key2 2 123 (integer) 7 127.0 .0 .1 :6379 > get key2"ab123fg" ############################################################### #setex (set with expire) 设置过期时间 #setnx (set if not exist) 如果不存在再设置127.0 .0 .1 :6379 > setex key3 30 "hello" OK127.0 .0 .1 :6379 > get key3 "hello" 127.0 .0 .1 :6379 > ttl key3 (integer) 23 127.0 .0 .1 :6379 > setnx mykey 123456 OK127.0 .0 .1 :6379 > ttl key3 (integer) -2 127.0 .0 .1 :6379 > keys * 1 ) "mykey" 2 ) "key2" 3 ) "key1" 127.0 .0 .1 :6379 > setnx mykey "566868" (integer) 0 127.0 .0 .1 :6379 > get mykey "123456" ############################################################### mset key1 value1 key2 value2 ...... 批量设置键值 mget key1 key2......批量获取键值127.0 .0 .1 :6379 > mset k1 v1 k2 v2 k3 v3 OK127.0 .0 .1 :6379 > keys *1 ) "k3" 2 ) "k2" 3 ) "k1" 127.0 .0 .1 :6379 > mget k1 k2 k31 ) "v1" 2 ) "v2" 3 ) "v3" 127.0 .0 .1 :6379 > msetnx k1 m1 k4 v4 (integer) 0 127.0 .0 .1 :6379 > get k4 (nil)127.0 .0 .1 :6379 > get k1"v1" ##设置一个对象 set user:1 {name:zhangsan,age:18 } #设置一个user:1 对象的值为json字符串来保存一个对象 #这里的key很巧妙,user:{uid}:{属性},如此设置在redis中完全ok127.0 .0 .1 :6379 > mset user:1 :name zhangsan user:1 :age 18 OK 127.0 .0 .1 :6379 > mget user:1 :name user:1 :age1 ) "zhangsan" 2 ) "18" 127.0 .0 .1 :6379 > getset db redis (nil)127.0 .0 .1 :6379 > getset db mongodb "redis" 127.0 .0 .1 :6379 > get db"mongodb" ###################################################
String类的使用场景: value可以使字符串,还可以是数字
做计数器
统计多单位的数量 uid:123455:follower 0
粉丝数
对象缓存存储
二.List类型 在redis中,list可以当做栈,队列,双端队列,或阻塞队列来使用
所有有关list的命令,都是字母’L’开头的
基本命令使用:
key为操作的列表的名字 - LPUSH key value [value ....] 从队列的左边入队一个或多个元素 ps: 在队列中,编号是从左到右为0 ,1 ,2 ,3 ,如果前面LPUSH一个元素后,他的编号为0 ,继续LPUSH一个元素,此时他的编号变成了1 - LPUSHX key value 如果队列存在,从队列的左边入队一个元素 - LRANGE key start end 从列表中取出指定编号范围内的元素,0 ,-1 为取出所有 - LREM key count value 从列表中删除元素,注意元素的value 必须明确指定,count 为删除的value 的个数 - LSET key index value 设置列表中编号为index的元素的值 - LTRIM key start end 修建指定范围内的数据,语句执行结束后,原来的key 中只保存范围内的值,其他的都被删除 - RPOP key 从队列的右边出队一个元素 - RPOPLPUSH source destination 删除source列表中最后一个元素(pop出最右边的),并追加到另一个列表(并加到另一个队列左边) - RPUSH key value [value ....] 从队列的右边入队一个或多个元素 - RPUSHX key value 如果队列存在,从队列的右边入队一个元素 - LLEN key 获取列表key 的元素个数 - LINSERT key [BEFORE/AFTER] pivot value 在列表key 的元素pivot前面或后面插入元素value
如果key不存在,push时创建列表
如果移除了key的所有值,key为空链表,也相当于不存在
在llist的两边插入或改动元素时,效率最高,修改中间元素或插到中间,效率相低
适用场景:消息排队,消息队列(LPUSH,RPOP),栈(LPUSH,LPOP)
三.Set类型 与java中的set类似,不允许元素重复
与set相关的命令,都以字母‘S’开头
基本命令:
- SADD key member [member ...] 添加一个或多个元素到集合中 - SCARD key 获取集合中的元素数量 - SISMEMBER key member 判断member 元素是否在集合key 中 - SMEMBERS key 获取集合中的所有元素 - SMOVE source destination member 把集合source中的一个元素member 移动到另一个集合中,source中将不再有该member - SREM key member [member ...] 删除集合中的一个或多个元素 - SPOP key [count] 删除并获取集合中的一个元素,由于元素时无序的,因此pop 出哪一个不知道,count指定个数 - SRANDMEMBER key [count] 从集合中随机取获取一个元素 - SDIFF key1 key2 求key1与key2的差集,即key1中存在,但是key2中不存在的 - SINTER key [key ...] 求集合间的交集 - SINTERSTORE destination key [key ...] 求集合间的交集,并保存新集合destination中 - SUNION key [key ...] 求集合间的并集 - SUNIONSTORE destination key [key ...] 求集合间的并集,并保存新集合destination中
适用场景:
微博中,将A用户的所有关注的人放在一个set集合中,将他的粉丝也放到一个集合中
共同关注求交集,求推荐好友等
四.Hash(哈希) Map集合,key为一个集合,存放的元素为kv对
和string的集合差不对,只不过string集合存放单个value,Map集合存放kv
基本命令:
- HSET key field value 设置集合key 中的kv对 - HSETNX key field value 如果当前的kv不存在,设置kv - HMSET key field value [field value....] 批量设置集合key 中的kv对 - HGET key field 获取集合key 中键为field的value - HGETALL key 读取key 中的所有域和值,field和value都有 - HMGET key field [field...] 批量获取集合key 中键为field的value - HLEN key 获取key 集合中所有字段的数量 - HKEYS key 获取key 中的所有field字段 - HVALS key 获取key 中的所有value值 - HEXISTS key field 判断field是否存在于key 中 - HDEL key field [field...] 删除一个或多个field,对应的value也会删除 - HINCRBY key field increment 将key 中指定域的值(value)增加给定的数字 - HINCRBYFLOAT key field increment 将key 中指定域的值(value)增加给定的浮点数
相对于String类型,hash更适合对象的存储,string更适合字符串的存储,当然也可以用string存储对象
五.Zset(有序集合) 在set的基础上,增加了一个score值 set key value zset key score value
基本命令:
- ZADD key score member [score member ....]添加一个或多个成员到一个有序的set,如果已经存在,那么更新分数 - ZCARD key 获取一个排序集合中成员的数量 - ZCOUNT key min max 返回分数在指定范围内的成员数量 - ZINCRBY key increment member 将指定的成员的score增加increment - ZRANGE key start stop 根据指定的index返回范围内的成员 - ZRANK key member 返回member 在排序集合中的索引 - ZREM key member 删除一个成员
适用场景:
对set排序,班级成绩,工资排序,带权重的成员,排行榜等等
六.三种特殊的类型
Geospatial 地理位置类型
Hyperlog 基数统计类型
Bitmap 位图场景
写吐了,需要用的时候还是查官方文档吧。。。🐶
参考链接 redis中文官方网站
Command reference – Redis