使用spring boot的小伙伴可以参考《Spring Boot整合Redis》
1.String 类型
作用 | 语法 |
---|
设置值key-value | set key value |
获取value | get key |
删除元素 | del key |
追加值(若没有对应的key,则自动创建key) | append key extraValue |
获取value的长度 | strlen key |
加一 | incr key |
减一 | decr key |
加num | incrby key num |
减num | decrby key num |
获取start到end之间的key (若end是负数则获取start到最后) | getrange key start end |
设置过期时间 | setex key seconds value |
key不存在的前提下才会进行设置 | setnx key value |
key不存在的情况下设置过期时间 | set key value nx ex seconds |
设置多个值 | mset key1 value1 key2 value2 |
查询多个值 | mget key1 key2 |
原子性操作设置值 | msetnx key1 value1 key2 value2 |
value设置成json对象 | mset key {key1:value1, key2: value2} |
获取并设置新值如果key存在则返回旧的value并且覆盖旧的value,如果key不存在则返回nil,执行失败) | getset key valuee |
key可以设置成特殊类型 | 例如 user:{id}:{field} |
2.List类型
作用 | 语法 |
---|
从头部插入数据 | lpush key value |
从尾部插入数据 | rpushkey value |
查询范围内的数据 | lrange key start end |
移除头部的第一个值 | lpop key |
移除尾部的第一个值 | rpop key |
获取第index的值 | lindex key index |
获取列表的长度 | llen key |
从上到下移除一个key | lrem key |
从下到上删除一个key | rrem key |
从上到下移除num个value | lrem key num value |
截取start到end数据(其他未被截取到的元素会被删除) | ltrim key start end |
从旧的key的头部移动到新的key的头部 | lpoplpush keyold keynew |
将下标index的值替换成新的newValue(不存在会报错) | lset key index newValue |
在已存在值的前面添加一个新的值 | linsert key before existsValue newValue |
在已存在值的后面添加一个新的值 | linsert key after existsValue newValue |
3.Set类型
作用 | 语法 |
---|
添加数据 | sadd key value |
查看数据 | smembers key |
查看是否存在该元素(返回存在的数据) | sismember key value |
获取key的元素个数 | scard key |
移除value元素 | srem key value |
随机获取一个元素 | sandmember key |
随机删除一个元素 | spop key |
将value 移动到newKey | smove key newKey value |
获取key1和key2的差集 | sdiff key1 key2 |
获取key1和key2的交集 | sinter key1 key2 |
获取key1和key2的并集 | sunion key1 key2 |
4.zset 有序集合
作用 | 语法 |
---|
在index位置添加一个元素value | zadd key index value |
添加多个元素 | zadd key index1 value1 index2 value2 |
排序 从小到大 | zrangebyscore key min max |
排序 从大到小 | zrevrangebyscore key +inf -inf |
排序 从负无穷到正无穷 | zrangebyscore key -inf +inf |
删除指定元素 | zrem key value |
获取元素个数 | zcard key |
获取 范围内的数据 (max为-1 代表 获取到最后一个) | zrange key min max |
获取 指定区间的成员数量 | zcount key index1 index2 |
5.geospatial 地理位置 底层使用zset实现的(zset的名依然适用于此)
作用 | 语法(距离单位: m(米) km(千米)mi(英里)ft(英尺)) |
---|
新增一个中国城市的经纬度 | geoadd key lat lng name |
添加多个经纬度 | geoadd key lat1 lng1 name1 lat2 lng2 name2 |
获取经纬度 (一个或多个) | geopos key name1 name2 |
获取两个name之间的距离差 | geodist key name1 name2 km |
获取此经纬度范围内500km的 name(带有距离差) | georadius key lat lng 500 km withdist |
获取此经纬度范围内500km的 name(带有经纬度) | georadius key lat lng 500 km withcoord |
查询name为中心的1000km范围内的城市 | georediusbymember key name 1000 km |
获取范围内的元素 | zange key min max |
移除元素 | zrem key nam |
6.Hash类型 本质和String类似,value 用hash格式表示
作用 | 语法 (key:redis的key,field:hash的key, value:hash的value) |
---|
添加数据 | hset key field value |
添加数据,不存在则设置,否则设置失败 | hsetnx key field value |
获取field 对应的value | hget key field |
设置多个hash | hmset key field1 value1 field2 value2 |
获取多个field的值 | hmget key field1 field2 |
获取所有的hash元素 | hgetal |
删除指定的field元素 | hdel key field |
获取长度 | hlen key |
判断是否存在某一个field | hexists key field |
获取key的所有的fields | hkeys key |
获取key的所有的value(hash中的value) | hvalues key |
自增num | hincrby key field num |
7.hyperloglog 并集去除重复
作用 | 语法 |
---|
设置元素 | pfadd key value1 value 2 |
统计元素个数 | pfcount key |
合并去重key2和key3到 key1 | pfmerge key1 key2 key3 |
设置元素 | pfadd key value1 value 2 |
设置元素 | pfadd key value1 value 2 |
8.bitmaps 位存储 操作二进制 0, 1
作用 | 语法 |
---|
记录当前index的 bit值 (0或1) | setbit key index bit2 |
获取数据 | getbit key index |
统计数量,可有条件和无条件 | bitcount key start end |
总结
本文介绍了Redis的八种数据存储类型
- 工作中最常用的String可以满足大部分场景
- 部分排序、热点数据、流量等,可以使用zset
- 粗略距离位置可以使用geospatial,但是测试发现和谷歌地图5km的偏差
- bitmaps 主要用于统计,0和1用于两种类型