Redis的数据类型
Redis官网:Redis官网地址 Redis中文网地址:Redis中文网地址
Redis有5种基本类型和3种特殊类型,分别为Strings,Lists,Sets,sorted sets(Zsets),Hashes和BitMaps,Hyperloglogs,Geospatial,还有redis的一些常识,比如说redis默认有16个数据库,可以用select index来选择用那个库等,将会在下一篇说一下,下面介绍一下每一种数据类型的常用命令。
1.redis的5中基本数据类型
1.1 String
redis默认选择第一个库,也可以自己选:select index
设置一个值:set key value
例如:set name tom一次设置多个值:mset key1 value1 key2 value2 …
例如:mset addr beijing month july追加字符串: append key value
例如:append name honey 追加成功返回整个字符串的长度获取字符串:get key
例如: get name 就得到tomhoney同时获取多个值:mget key1 key2 …
获取字符串的长度:strlen key
例如:strlen name获取所有的key: keys *
判断某个key是否存在:exists key
例如:exists name 存在则返回1自增运算:incr key
例如:set age 13
incr age 每次加一自定义自增:incrby key value
例如: incrby age 6 这样age就加6自减运算:decr key
例如:decr age 每次减一自定义自减:decrby key value
例如:decrby age 6 这样age就减6获取某个范围的字符串:getrange key start end start索引从0开始
例如:getrange name 0 2 这样就获取到tom
getrange name 0 -1 这样就获取整个字符串tomhoney替换某个范围的字符串:setrange key index value
替换从指定索引处的字符串
例如:setrange name 1 xxxx
则name的值就变成了txxxxney设置某个key的过期时间:setex key time value
例如:setex k1 30 v1 设置k1的值为v1,过期时间为30秒
还可以用expire命令来设置:expire key time查看某个key的剩余时间:ttl key
例如:ttl k1
返回值就是剩余的时间,单位是秒不存在再设置:setnx key value
如果key不存在,则创建key,返回1,key存在则返回0,创建失败
分布式锁会经常用到同时设置多个值:msetnx key1 value1 key2 value2 …
msetnx是一个原子操作,key1 key2只要有一个存在,则全部设置失败,要么以其成功要么一起失败
注意:redis的单次操作具有原子性,但是redis的事务不具有原子性
使用场景:
统计比如粉丝数,计数器等等
1.2 List
所有的List命令都是以l开头的,可以把list类型的数据当成队列,栈等数据结构
从list的左边插入一个或多个元素:lpush key value
例如:lpush list one从list的右边插入一个或多个元素:rpush key value
例如:rpush list two获取list中的值:lrange key start end
获取key中从start开始,到end结尾的数据
例如:lrange list 0 1
返回值为:one two
lrange list 0 -1
是获取所有值移除list左边的第一个元素:lpop key
返回值为被移除的元素one移除list右边的第一个元素:rpop key
返回值为被移除的元素two移除list集合中指定的元素:lrem key number valeu
移除key列表中数量为number个值为value的元素根据索引获取集合中的元素:lindex key index
获取key列表中索引为index的元素获取list集合的长度:llen key
获取key列表的长度裁剪list集合中的一部分作为list集合中的元素:ltrim key start end
把key集合从索引为start处截取,到索引为end位置处,作为一个新key集合移出列表的最后一个元素,并移动到新的列表中:rpoplpush key1 key2
移除key1集合中的最后一个元素作为key2集合中的第一个元素将list列表中指定下标的元素替换为另一个值,如果下标不存在就报错:
lset key index value
将key集合中索引为index的元素的值改为value,index不存在则报错在list列表中指定元素前面插入值:linsert key before value1 value2
在key集合中元素值为value1的前面插入值为value2的元素
1.3 Set
向set集合中添加元素:sadd key value
向key集合中添加value值,可以一次添加一个或多个值查看set集合中所有的元素:smembers key
查看key集合中所有的元素判断某个值是不是在集合中:sismember key value
判断value是否在key集合中,存在返回1,不存在返回0获取集合中元素的个数:scard key
获取key集合中元素的个数删除set集合中指定值的元素:srem key value
删除key集合中值为value的元素由于set是一个无序集合,所以可以随机抽取元素:srandmember key number
从key集合中随机抽取number个元素随机删除set集合中的一些值:spop key number
从key集合中随机删除number个元素把指定元素从一个set集合移动到另一个set集合中:
smove key1 key2 value
把key1集合中的value移动到key2集合中
1.4 Zset
添加元素:zadd set score1 value1 score2 value2 …
可以设置一个或多个分数为score,值为value的元素,score用于排序从小到大排序:zrange salary 0 -1
或则:zrevrangebyscore salary -inf +inf
根据score的大小从小到大排序从大到小排序:zrevrangebyscore salary +inf -inf
根据score的大小从大到小排序显示全部用户并且带score的排序:从大到小
zrevrangebyscore salary +inf -inf withscores移除元素:zrem salary value
移除salary集合中值为value的元素hash集合中元素的个数:zcard salary
获取salary集合中元素的个数获取指定区间内的元素数量:zcount zset score1 score2
获取分数从score1 开始到score2结束的区间内元素的数量
1.5 Hash
hash是一个map集合,放到redis中相当于key-map,这样的数据结构。
设置一个值:hset key field1 value1
向key集合中设置一个字段名为filed1,值为value1的元素设置多个值:hmset key field1 value1 field2 value2 …
向key集合中设置多个字段获取hash集合中所有数据:hgetall key
获取key集合中所有数据删除指定的key字段:hdel key field1
删除key集合中字段为field1的元素获取hash集合中键值对的数量:hlen key
判断指定hash集合中的字段是否存在:hexists key field1
判断key集合中是否存在字段名为field1的元素,存在返回1获取所有的key:hkeys key
获取所有的value:hvals key
自定义增量运算:hincrby myhash field1 2
给myhash集合中字段名为field1的元素值加2,如果为-2,就是减2如果不存在则设置:hsetnx hash field value
如果hash集合中字段名为field的字段不存在则设置成功,否则失败
2 三种特殊的数据类型
2.1 geospatial 地理位置
添加地理位置:geoadd china:city 经度 纬度 城市名
添加成功返回1
一般这样的数据不会一个一个导入,会有专门的数据包导入获取指定城市的经纬度:geopos china:city 城市名
返回值为对应的经纬度获取两个位置之间的距离: geodist china:city nanjing shanghai km
后面的km是单位,有米m,千米km,英里mi,英尺ft指定位置多少范围内的所有城市:georadius china:city 经度 纬度 距离 单位
例如:georadius china:city 110 30 1000 km
返回值带有经纬度的:
georadius china:city 110 30 1000 km withcoord获取指定的城市个数:
georadius china:city 110 30 1000 km withcoord count 2
获取两个城市找出位于指定元素周围的其他元素:
georadiusbymember china:city nanjing 1000 km返回一个或者多个位置元素的geohash表示,该命令将返回11个字符的geohash字符串,如果两个字符串越接近,表示两个元素的距离越近
geohash china:city nanjing shanghaigeo底层实现原理其实就是zset,比如我们可以使用
zrange china:city 0 -1
查询所有的元素
使用zrem china:city nanjing
来移除元素
2.2 Bitmaps
设置数据:setbit mybit 0 0
设置mybit中索引为0处的值为0,能设置的值只能为0或则1两个状态获取指定数据:getbit mybit 0
获取指定索引处的数据值统计值为1的个数:bitcount mybit
2.3 Hyperloglogs 基数统计
创建一组元素:
pfadd mylog a b c d …统计第一组元素的个数:
pfcount mylog合并两个组的元素:
pfmerge mylog3 mylog1 mylog2
合并mylog1和mylog2组元素到mylog3中