redis常见基本命令及数据类型

190 阅读5分钟

一、常见命令

1.redis默认有16个数据库,切换数据库:select [index] 命令,下表从0开始,依次到15。

2.基本命令:设置值:set [key] [value],获取值:get [key]

3.查看当前数据库所有key:keys *

4.清除当前数据库:flushdb,清除所有数据库:flushall

5.判断key是否存在:exists [key],返回1,说明存在

6.从哪个数据库移除key:move [key] [db]

7.设置过期时间(ttl):expire [key] [time],查看key的过期时间:ttl [key]

8.查看key类型:type key

二、5种基本数据类型

1.string

数据类型:字符串

1.追加字符串:append [key] [value],返回字符串长度

2.获取字符串长度:strlen [key]

3.对key值加1:incr [key],对key减1:decr [key]

4.对key加步长:incrby [key] [num],对key减步长:incrby [key] [num]

5.对字符串进行截取:getrange [key] [start] [end],start:开始索引,end:结束索引,当end为-1时,截取后面所有字符串。

6.对字符串进行替换:setrange [key] [index] [value],index:从那个索引位置开始替换,value:将要替换的值

7.设置存在不存在值:setex [key] [time] [value],当前key存在在设置;setnx [key] [value],当前值不存在再设置,分布式锁就是用这一特性实现

8.批量设置,批量获取:mset k1 v1 k2 v2,mget k1 k2,原子性操作

9.先获取再设置:getset [key] [value],不存在返回null,存在则是设置新值,存在则是更新值

应用场景:分布式锁(setnx)+计数器,点赞数(incr)

2.list

数据类型:列表,实际上是一个队列

命令前加l

1.从左边存值:lpush [key] [value1]:在key里面存value1,将值插入到列表的头部,从左边放值;取值:lrange [key] [start] [end],在key里取对应索引的值,当end为-1时,取出后面所有值。

2.从右边存值:rpush [key] [value1]:在key里面从右边添加值,插在列表的右部。

3.左边移除元素:lpop [key],移除一个元素,后面可以跟count,表示从左边移除几个

4.右边移除元素:rpop [key],移除一个元素,后面可以跟count,表示从右边移除几个

5.移除指定的值:lrem [key] [count] [value],count:移除几个,value:移除的元素

6.获取指定索引的值:lindex [key] [index]

7.列表长度:llen [key]

8.截取队列元素:ltrim [key] [start] [end],传入索引,已经修改了。

9.移除最后一个元素并移动到新的列表中去:rpoplpush [key] [newkey]

10.在指定的索引位置设置值:lset [key] [index] [value]

11.在指定的元素前面或者后面添加元素:linsert [key] [before/after] [value] [newValue]

应用场景:消息队列,关注的文章之类的

3.set

数据类型:无序,不能重复的集合

1.添加元素:sadd [key] [value1] [value2] [value3],重复元素插不进去。

2.查看元素:smembers [key]

3.判断是否有元素: sismember [key] [value]

4.获取元素集合个数:scard [key]

5.移除元素:srem [key] [value]

6.随机获取值:srandmember [key] [count],count:取出的元素个数,不删除

7.随机移除集合中的元素:spop [key] ,因为set是无序的,插入也是无序插入

8.移动集合;smove [key] [new key] [value],将value移动到新的集合

9.差集:sdiff [k1] [k2],第一个集合和第二个集合不同的元素,交集:sinter [k1] [k2]第一个集合和第二个集合公共的元素,,并集:sunion [k1] [k2],第一个集合和第二个集合所有的元素

应用场景:共同关注(交集 sinter),可能认识的人(差集 sdiff),抽奖:(随机弹出一个元素 spop)

4.hash

数据类型: map (key-<key,value>)

1.设置值:hset [key] [k] [value],获取值:hget [key] [k],hmset,hmget:同时设置,获取多个值, hgetall [key],获取key下所有值(k-v)

2.删除值:hdel [key] [k],删除指定key

3.获取当前key有多少值:hlen [key]

4.判断key下面是否有k:hexists [key] [k]

5.获取key下的所有key:hkeys [key],获取key下的所有值:hvals [key]

6.给值加步长:hincrby [key] [k] [count],k:具体属性,count:加几,没有减命令,直接加负数

7.没有值则设置:hsetnx [key] [k] [value]

应用场景:存对象,购物车

5.zset

数据类型:有序,不能重复的集合,在set基础上加入了排序

1.添加一个或多个值: zadd [key] [score] [value],获取所有元素:zrange [key] 0 -1

2.从小到大排序:zrangebyscore [key] -inf +inf ,-inf :负无穷,+inf:正无穷;zrangebyscore [key] -inf +inf withscores,携带分数,

3.从大到小排序:zrevrange [key] 0 -1 withscores

3.移除元素:zrem [key] [value]

4.查看元素个数:zcard [key]

5.获取指定区间的成员数量:zcount [key] [score1] [score2]

应用场景:排序(排行榜)

三、3种特殊类型

1.geospatial

数据类型:地理位置

1.添加坐标:geoadd [key](china:city) 116.40 39.90(坐标) beijin(城市)

2.获取指定城市的坐标:geopos china:city beijing

3.获取城市间距离:geodist china:city beijing shanghai geodist china:city beijing shanghai km(单位)

4.以当前坐标附近的其他城市:georadius china:city 110 30(当前位置) 1000(半径) km(单位),后面可以加参数限定查询出来的距离(withdist)数量(withcord)

5.以录入的元素(城市)为中心,找出一定距离的其他城市:georadiusbymember china:city beijing 1000 km

注:geo底层是基于zset实现的,可以在zset获取我们录入的城市坐标值

image.png

2.Hyperloglog

数据结构:基数(不重复的元素)统计的算法,占用内存小,存在一定错误率(不允许容错可以使用set)

1.存入元素,pfadd [key] a b c d e f g h i j k

2.统计元素个数: pfcount [key]

3.合并元素:pfmerge [key] [key2],把后面元素合并给前面元素

应用场景:网站访问人数

3.Bitmaps

数据结构:位存储,有两个状态 0 和 1

1.设置值:setbit [key] [k] [1/0]

2.获取值:getbit [key] [k]

3.统计值:bitcount [key]

应用场景:打卡考勤

image.png