Redis八大类型常用命令大全(五大常用类型+三个特殊类型)

守給你的承諾、 提交于 2020-11-01 21:22:19

绝对手敲验证完成的一篇博客,多敲几遍才能记得牢!

  • String类型:

**应用场景:**缓存、分布式ID、分布式锁、计数器
举例说明:实现分布式ID功能,通过incr自动增长或者incrby实现固定步长增长
常用命令:

 * 清空数据库:flushdb
 * 清空全部数据库:flushall
 * 当前数据库的使用大小:dbsize
 * 查看当前数据库有多少key:keys *
 * 切换数据库:select 0     -- redis默认有16个数据库,select 0 就是切换到0数据库
 * 查看某个key是否存在:exists name --查看name是否存在,存在返回1,不存在返回0
 * 删除某个key:move name  --移除name键
 * 设置某个key过期时间:expire name 10  --name 10s后过期
 * 在已有key的value里追加值:append name silence  --如果追加的key不存在就相当于setkey
 * 值相加:incr views    --对键为views的值加1
 * 值相减:decr views    --对键为views的值减1
 * 增加指定的值: incrby views 10  --对键为views的值加10
 * 减少指定的值: decrby views 10  --对键为views的值减10
 * 截取字符串:getrange name 0 3   --截取那么的值silence 0-3位 sile
 * 截取字符串:substr name 0 3  等于上面的getrange命令
 * 替换指定位置开始的字符串:setrange name 1 xx  --把silence的第1为替换为xx,结果为sxxence
 * 设置过期时间:setex age 30 25  --设置age 30s后过期
 * 查看键还有多长时间过期:ttl age  --查看age还有多长时间过期
 * 如果键不存在则新增该key:setnx age 100  --如果age存在则返回0并新增失败。
 * 批量设置键值:mset k1 v1 k2 v2 k3 v3  
 * 批量获取值: mget k1 k2 k3
 * getset name silence  --如果不存在该key则返回null并将silence设置进去,
                     如果存在该key则返回上次的值并将新值设置进去。    
  • List集合:
    **应用场景:**用户时间线、消息队列
    举例说明:实现消息队列功能,通过lpush/rpush实现消息的生成,通过lpop/rpop实现消息的移除

常用命令:

 * 设置list:lpush list v1   --从左边插入
 * 设置list:rpush list v1   --从右边插入
 * 获取list:lrange list 0 1 --获取list后两列,从左边读取
 * 获取list:rrange list 0 1 --获取list后两列,从右边读取
 * 移除list:lpop list       --移除当前list里最左边的元素
 * 移除list:rpop list       --移除当前list里最右边饿元素
 * 获取list某一个值:lindex 1 --通过下标获取当前list里最左边的第二个元素
 * 返回列表的长度:llen list  --返回当前list的长度
 * 移除list集合指定的值:lrem list 1 three  --移除list集合中指定个数的three值
 * 截取指定长度的list:ltrim mylist 1 2  --截取list集合中指定长度的值
 * 移除list最右的值并添加将其添加到一个新list里:rpoplpush mylist myotherlist
 * 查看是否存在该list:exists list  --存在返回1,不存在返回0
 * 将list中指定下标的值替换:lset list 0 vv --将list中下标为0的值替换为vv
 * 在指定位置前面加入元素:linsert mylist before v0 v3 --在v0前面添加元素v3
 * 在指定位置前面加入元素:linsert mylist after v0 v4 --在v0后面添加元素v4
  • Set集合:set中的值是不能重复的(无需不重复集合)

**应用场景:**抽奖、签到、关注
举例说明:实现抽奖功能,通过srandmember随机选取一个或多个中奖的用户。

常用命令:

* 设置set:sadd myset hello
* 获取set:smembers myset
* 查看在set中是否存在某个值:sismember myset hello
* 获取set中的个数:scard myset
* 移除set中的指定元素:srem myset hello
* 随机抽选出一个元素:srandmember myset
* 随机删除set中的元素:spop myset
* 将一个指定的元素移动到另一个set集合:smove myset myset2 nxw

微博,B站的共同关注(并集)

 * set集合1和set集合2的不同:sdiff myset myset2
 * set集合2和set集合1的不同:sdiff myset2 myset
 * set集合1和set集合2的交集:sinter myset myset2
 * set集合1和set集合2的并集:sunion myset myset2
  • Hash:
    **应用场景:**购物车
    举例说明:实现购物车功能,hincrby实现数量增减,hdel实现删除,hgetall实现全选,hlen查看商品数。

Hash相当于key-map集合(key,<key,value>)
常用命令:

* 设置一个hash:hset myhash field1
* 获取hash数据:hget myhash field1
* 同时设置多个值:hmset myhash field1 nxw field2 silence
* 同时获取多个字段:hmget myhash field1 field2
* 获取全部数据:hgetall myhash
* 删除hash指定key字段:hdel myhash field1
* 获取所有长度:hlen myhash
* 判断hash中是否存在该字段:hexists myhash field1 存在返回1不存在返回0
* 查看当前hash中所有的key:hkeys myhash
* 查看当前hash所有的value:hvals myhash   只获得所有value

hash存储一些经常变更的数据(尤其是用户信息之类的)
hash更适合对象的存储,String更适合字符串的存储。

  • Zset:(有序集合)
    **应用场景:**排行榜
    举例说明:实现排行榜功能,通过zrangebyscore进行分数排行
    在set集合的基础上增加了一个值。


* 添加一个值:zadd salary 20000 nxw
* 添加多个值:zadd salary 30000 silence 40000 tsp
* 获取zset集合中的所有值:zrange salary 0 -1
* 升序获得zset集合中的值:ZRANGEBYSCORE salary -inf +inf   (-inf负无穷)从小到大
* 升序获得zset集合中的值并指定显示字段:ZRANGEBYSCORE salary -inf +inf withscores
* 降序获得zset集合中的值:zrevrange salary 0 -1
* 移除指定的值:zrem salary nxw
* 获取集合中的个数:zcard salary

三种特殊类型

  • geospatial地理位置:
    **应用场景:**定位,附近的人,打车距离推算等
 * 添加地理位置:geoadd China:city 116.40 39.90 beijing
 * 添加多个地理位置:geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen
 * 获取地理位置:geopos China:city beijing
 * 获取多个地理位置:geopos China:city beijing shanghai
 * 返回两个城市之间的距离:geodist China:city beijing shanghai
 * 以某一个地理位置为中心,找出某一半径内的元素:GEORADIUS china:city 110 30 1000 km
 * 以某一个地理位置为中心,找出某一半径内的元素带直线距离:GEORADIUS china:city 110 30 1000 km withdist
 * 以某一个地理位置为中心,找出某一半径内的元素带经纬度:GEORADIUS china:city 110 30 1000 km withcoord
 * 根据给定的城市找出该城市指定距离的城市:GEORADIUSBYMEMBER china:city beijing 1100 km
  • Hyperloglog基数统计:
    基数?在一个数据集内不重复的元素。
    **应用场景:**网站PV(一个人访问多次还是算做一个访问量)、点赞量等

 * 插入元素:PFADD myhyper a b c d e f g h i j
 * 查看有多少个元素:PFCOUNT myhyper
 * 取myhyper和myhyper2的交集并把并集存到myhyper3: PFMERGE myhyper3 myhyper myhyper2
  • BitMaps(位图):

**应用场景:**登录未登录,打卡等

* 使用bitmaps来记录周一到周五的打卡情况。
* 插入元素:setbit sign 1 1     # 1 1 第一个1代表周一,第二个1代表已打卡
* 查看周三天是否有打卡:getbit sign 3  
* 查看一共有几天打卡:bitcount sign
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!