一、常见命令
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获取我们录入的城市坐标值
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]
应用场景:打卡考勤