绝对手敲验证完成的一篇博客,多敲几遍才能记得牢!
- 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
来源:oschina
链接:https://my.oschina.net/u/4271269/blog/4480717