网站建设培训相关资料,网站建设驻地开发合同,百度竞价ocpc,国家水资源监控能力建设网站文章目录Redis 常见的数据类型及命令一、常见的NoSQL二、Redis 简介三、key 键的一些操作命令四、Redis的五种基本数据结构1、String#xff08;字符串#xff09;介绍常用命令1.1 set/get1.2 append1.3 strlen1.4 setex1.5 mset/mget1.6 setrange/getrange1.7 setnx1.8 incr…
文章目录Redis 常见的数据类型及命令一、常见的NoSQL二、Redis 简介三、key 键的一些操作命令四、Redis的五种基本数据结构1、String字符串介绍常用命令1.1 set/get1.2 append1.3 strlen1.4 setex1.5 mset/mget1.6 setrange/getrange1.7 setnx1.8 incr/decr1.9 incrby/decrby1.10 getset应用场景2、List列表介绍常用命令2.1 lpush/rpush2.2 lrange2.3 lpop/rpop2.4 lindex2.5 llen2.6 lrem2.7 lset2.8 linsert应用场景3、Set集合介绍常用命令3.1 sadd3.2 smembers3.3 sismember3.4 scard3.5 srem3.6 spop3.7 srandmember3.8 smove3.9 sinter3.10 sunion3.11 sdiff应用场景4、Hash哈希介绍常用命令4.1 hset/hget4.2 hmset/hmget4.3 hexists4.4 hkeys4.5 hincrby4.6 hdel4.7 hsetnx应用场景5、Zset有序集合介绍常用命令5.1 zadd5.2 zrange5.3 zrangebyscore5.4 zrem5.5 zincrby5.6 zcount5.7 zrank应用场景五、Redis的三种特殊数据结构1、Bitmaps介绍常用命令应用场景2、Geospatial介绍常用命令应用场景3、Hyperloglog介绍常用命令应用场景Redis 常见的数据类型及命令 
一、常见的NoSQL 
 NoSQLNot Only SQL 即“不仅仅是SQL”泛指非关系型的数据库主要针对的是键值、文档以及图形类型数据存储。并且NoSQL 数据库天生支持分布式数据冗余和数据分片等特性旨在提供可扩展的高可用高性能数据存储解决方案。 
1、KV型NoSQLRedis 
键值数据库是一种较简单的数据库其中每个项目都包含键和值。这是极为灵活的 NoSQL 数据库类型因为应用可以完全控制 value 字段中存储的内容没有任何限制。Redis 和 DynanoDB 是两款非常流行的键值数据库 数据基于内存读写效率高KV型数据时间复杂度为O(1)查询速度快 2、列式NoSQLHBase 
按照列进行数据存储该类型便于存储结构化和半结构化的数据可以方便做数据压缩和针对某一列或者某几列的数据查询。 HBase 和 Cassandra 是两款非常流行的宽列存储数据库 
3、文档型NoSQLMongDB 
文档型NoSql指的是将半结构化数据存储为文档的一种NoSql文档型NoSql通常以 JSON 或者 XML 格式存储数据。MongoDB 就是一款非常流行的文档数据库 
4、搜索性NoSQLElasticSearch 
搜索型NoSql的诞生正是为了解决关系型数据库全文搜索能力较弱的问题ElasticSearch 是搜索型 NoSql 的代表产品。ES的全文搜索特性使它成为构建搜索引擎的利器。除此之外ES很好的支持了复杂聚合查询这一特点还使得ES非常适合拿来作数据分析使用 严格的说ES 不是一个数据库而是一个搜索引擎ES的方方面面也都是围绕搜索设计的 关系型数据库SQL和非关系型数据库NoSQL的区别 
1关系型数据库SQL数据库关系型数据库最典型的数据结构是表由二维表及其之间的联系所组成的一个数据组织 
优点 
易于维护都是使用表结构格式一致使用方便SQL 语言通用可用于复杂查询复杂操作支持 SQL可用于一个表以及多个表之间非常复杂的查询。 
缺点 
读写性能比较差尤其是海量数据的高效率读写固定的表结构灵活度稍欠 
2非关系型数据库NoSQL数据库 
优点 
格式灵活存储数据的格式可以是 key-value 形式、文档形式、图片形式等等使用灵活应用场景广泛而关系型数据库则只支持基础类型。速度快NoSQL 可以使用硬盘或者随机存储器作为载体而关系型数据库只能使用硬盘高扩展性成本低NoSQL 数据库部署简单基本都是开源软件。 
缺点 
不提供 SQL 支持学习和使用成本较高无事务处理数据结构相对复杂复杂查询方面稍欠。 
二、Redis 简介 
 Redis 是一个基于 C 语言开发的开源数据库BSD 许可。与传统数据库不同的是 Redis 的数据是存在内存中的内存数据库读写速度非常快被广泛应用于缓存方向。并且Redis 存储的是 KV 键值对数据。它的特点如下 
基于内存运行性能高效支持分布式理论上可以无限扩展key-value 存储系统开源的使用 ANSIC 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、KeyValue数据库并提供多种语言的API Redis 默认支持16个数据库可以通过调整Redis的配置文件 redis/redis.conf 中的 databases 来修改这一个值设置完毕后重启Redis便完成配置。 Redis 的默认端口号是 6379 可以通过 select 命令来切换数据库例如select 1select 0 三、key 键的一些操作命令 1、keys 查看当前库所有key 
1命令keys 
2作用查看当前库中所有的 key。 
3语法keys * 有3个通配符*?[] *通配任意多个字符?通配单个字符[]通配括号内的某1个字符 keys *keys ?ame
namekeys [a,g,e]ge
ege
age2、exists 查看key是否存在 
1命令exists 
2作用判断某个 key 是否存在返回1表示存在0不存在。当后面跟多个 key 时只返回存在的个数但不返回哪一个存在/不存在。 
3语法exists key [key …] exists name
1
#id name age存在a不存在exists id name age a
3注意关键字exists等都可以通过tab键来补全而且命令行或者第三方工具都会有命令语法提示。 3、type 查看key的类型 
1命令type 
2作用查看当前 key 所储存的值的类型。返回当前 key 所储存的值的类型如string 、list等。 
3语法type key type name
string4、del 删除已存在的key 
1命令del 
2作用删除已存在的key不存在的 key 会被忽略。当后面跟多个 key 时则返回删除成功的个数。 
3语法del key [key …] del ege
1
#删除不存在的keydel kkkkkk
0del v1 v2 v3
35、expire 设置 key 的过期时间 
1命令expire 
2作用给 key 设置过期时间单位为秒。设置成功返回 1 。 当 key 不存在返回 0。 
3语法expire key seconds expire id 300
(integer) 1
#查看剩余时间ttl id
(integer) 298
#当设置已经有过期时间的key时会覆盖原来的过期时间expire id 600
(integer) 1ttl id
(integer) 597当设置已经有过期时间的 key 时会覆盖原来的过期时间。 6、ttl 查看key的剩余过期时间 
1命令ttl 
2作用以秒为单位返回 key 的剩余过期时间。当 key 不存在时返回 -2 。 当 key 存在但没有设置剩余生存时间时返回 -1 。 否则以秒为单位返回 key 的剩余生存时间。 
3语法ttl key ttl id
-1ttl ids
-27、persist 移除key的过期时间 
1命令persist 
2作用移除给定 key 的过期时间使得 key 永不过期。当过期时间移除成功时返回 1 。 如果 key 不存在或 key 没有设置过期时间返回 0 。 
3语法expire key persist id
0四、Redis的五种基本数据结构 
1、String字符串 介绍 
 String 是 Redis 最基本的类型一个 key 对应一个 value。String 是二进制安全的意味着 String 可以包含任何数据比如序列化对象或者一张图片。String 最多可以放 512M 的数据但是大字符串非常不建议。 
常用命令 
1.1 set/get 
1命令 
setget 
2作用 
用于设置给定 key 的值。如果 key 已经存储其他值 set 就重写旧值且无视类型。用于获取指定 key 的值。如果 key 不存在返回 nil 。 
3语法 
set key valueget key get name 
zhangsanset name xiaobai
OKget name 
xiaobaiget namem
(nil)1.2 append 
1命令append 
2作用将给定的 value 追加到 key 原值末尾并返回 key 的长度 
3语法append key value append name hello
12get name
xiaobaihello注意 如果 key 已经存在并且是一个字符串 append 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在 append 就简单地将给定 key 设为 value 就像执行 set key value 一样。 1.3 strlen 
1命令strlen 
2作用获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时返回一个错误。 
3语法strlen key strlen name
12
#list1为list类型strlen list1
WRONGTYPE Operation against a key holding the wrong kind of value1.4 setex 
1命令setex 
2作用给指定的 key 设置 value 值及秒级的过期时间。如果 key 已经存在 setex 命令将会替换旧的值并设置过期时间。 
3语法setex key seconds value setex num 300 v1
OKget num
v1ttl num
231setex num 300 v2
OKttl num
296get num
v2setex 和 expire 的区别在于前者是在创建的 key 时设置过期时间后者则是设置已经存在的 key。 1.5 mset/mget 
1命令 
msetmget 
2作用 
同时设置一个或多个 key-value 。返回所有(一个或多个)给定 key 的值。 
3语法 
mset key value [key value …]mget key [key …] mset v1 123 v2 456 v3 789
OKmget v1 v3 v2
123
789
4561.6 setrange/getrange 
1命令 
setrangegetrange 
2作用 
设置指定区间范围内的值从 offset 位置开始依次往后设置包含offset位置返回字符串的长度获取指定区间范围内的值从 start 位置到 end 位置包含两端 
3语法 
setrange key offset valuegetrange key start end set data abcdefg
OKsetrange data 2 xxx
7get data
abxxxfggetrange data 2 5
xxxf
#end超过字符串的长度即超过下标getrange data 2 9
xxxfg注意 setrange 命令也可以直接创建 key 和 value。getrange 的 end 可以超过字符串长度超过则为查看 offset 位置到字符串的末尾。 1.7 setnx 
1命令setnx 
2作用只有在 key 不存在时设置 key 的 value 值。成功则返回1key 存在则返回 0。 
3语法setnx key value setnx data a
(integer) 0setnx v5 123
(integer) 11.8 incr/decr 
1命令 
incrdecr 
2作用 
将 key 中储存的数字值增一并返回 key 增一后的值将 key 中储存的数字值减一并返回 key 减一后的值 
3语法 
incr keydecr key 注意 如果 key 不存在那么 key 的值会先被初始化为 0 然后再执行 incr/decr 操作。如字符串类型的值不能表示为数字、或者是其他类型那么返回一个错误。 incr v1
1incr v1
2incr data
ERR value is not an integer or out of rangedecr v2
-1decr v2
-21.9 incrby/decrby 
1命令 
incrbydecrby 
2作用 
将 key 存储的数字值按照 increment 进行增加并返回增加后的值。将 key 存储的数字值按照 decrement 进行减小并返回减小后的值。 
3语法 
incrby key incrementdecrby key decrement 注意 如果 key 不存在那么 key 的值会先被初始化为 0 然后再执行 incrby/decrby 操作。如字符串类型的值不能表示为数字、或者是其他类型那么返回一个错误。 exists v1
0incrby v1 10
10get v1
10decrby v1 5
5incrby data 10
ERR value is not an integer or out of range1.10 getset 
1命令getset 
2作用将给定 key 值设为 value并返回 key 的旧值old value即先 get 然后立即 set 
3语法getset key value 注意 当 key 不存在时getset 等同于 set当 key 存在时getset 等同于重命名getset 重命名与 get 重命名的区别在于前者会返回旧值而后者不会 exists v1
0getset v1 123
nullget v1
123getset v1 456
123get v1
456应用场景 
计数器例如统计网站的访问量等分布式锁需要存储常规数据的场景session、token、图片地址、序列化后的对象等 
2、List列表 介绍 
 List 是简单的字符串列表按照插入顺序排序。你可以添加一个元素到列表的头部左边或者尾部右边。底层是一个双向链表对两端操作性能极高通过索引操作中间的节点性能较差。 
 一个List最多可以包含 2^32 - 1个元素  每个列表超过40亿个元素。 
常用命令 
2.1 lpush/rpush 
1命令 
lpushrpush 
2作用 
从左边头部插入一个或多个值并返回列表的长度从右边尾部插入一个或多个值并返回列表的长度 
3语法 
lpush key value [value …]rpush key value [value …] lpush data v1 v2 v3
3lrange data 0 -1
v3
v2
v1rpush data v4 v5 v6
6lrange data 0 -1
v3
v2
v1
v4
v5
v6上述的插入元素的过程具体如下图示下面涉及到 data 列表的都可以参考这张图 2.2 lrange 
1命令lrange 
2作用返回 key 列表中的 start 和 end 之间的元素包含 start 和 end。 其中 0 表示列表的第一个元素-1表示最后一个元素。 
3语法lrange key start end 注意end 值是可以超过列表的长度的即为查询从 start 位置开始到列表末尾的值。 lrange data 1 3
v2
v1
v4lrange data 4 10
v5
v62.3 lpop/rpop 
1命令 
lpoprpop 
2作用 
从列表中移除第一个值并返回移除的值从列表中移除最后一个值并返回移除的值 
3语法 
lpop keyrpop key 注意当列表中的元素全部被移除完这个列表也就不存在了值在键在值光键亡。 lpop data
v3lpop data
v2rpop data
v6rpop data
v5rpop data
v4rpop data
v1exists data
02.4 lindex 
1命令lindex 
2作用获取列表 index 位置的值(从左边开始)。 
3语法lindex key index 注意 index 的值是可以大于列表的长度的不过查询到的值会为 null。index 的值也可以为负数负数为从右边开始例如上面 data 列表的 -1 的值 v6 llen data
6lindex data 4
v5lindex data 10
nulllindex data -1
v6lindex data -5
v2lindex data -7
null2.5 llen 
1命令llen 
2作用获取列表长度不存在的 key 会返回 0。 
3语法llen key llen data
6
# l 不存在llen l
02.6 lrem 
1命令lrem 
2作用从左边开始删除与 value 相同的 count 个元素并返回成功删除的个数。 
3语法lrem key count value lrem data 2 v1
1lrange data 0 -1
v3
v2
v4
v5
v6lrem data 2 v
02.7 lset 
1命令lset 
2作用将索引为 index 的值设置为 value若 index 超过列表长度则会报错。 
3语法lset key index value lset data 0 v0
OKlrange data 0 1
v0
v2llen data
5lset data 5 v0
ERR index out of rangelset data 8 v0
ERR index out of range2.8 linsert 
1命令linsert 
2作用在列表中 value 值的 前边/后边 插入一个 new value 值从左开始并返回列表的长度 
3语法 
linsert key before value newvaluelinsert key after value newvalue lrange data 0 -1
#列表此时为v0 v2 v4 v5 v6linsert data before v2 v1
6linsert data after v2 v3
7lrange data 0 -1
#列表此时为v0 v1 v2 v3 v4 v5 v6应用场景 
消息队列信息流展示如最新列表、关注的人列表、粉丝列表、排行榜等等 
3、Set集合 介绍 
 Redis 中的 Set 类型是一种无序集合集合中的元素没有先后顺序但都唯一当需要存储一个列表数据又不希望出现重复数据时Set 是一个很好的选择。Set 是 String 类型的无序集合它底层其实是一个 value 为 null 的 hash 表所以添加、删除、查找的时间复杂度都是 O(1)。 
常用命令 
3.1 sadd 
1命令sadd 
2作用将一个或多个元素添加到集合 key 中已经存在的元素将被忽略并返回实际插入的个数。 
3语法sadd key member [member …] sadd data v1 v2 v2 v3 v4 v5 v5 v6
6sadd data v7
1smembers data
v7
v6
v3
v4
v1
v5
v23.2 smembers 
1命令smembers 
2作用获取该集合的所有元素。 
3语法smembers key 
3.3 sismember 
1命令sismembers 
2作用判断集合 key 中是否含有 member 元素如有返回1否则返回0。 
3语法sismember key member sismember data v4
1sismember data v9
03.4 scard 
1命令scard 
2作用返回该集合的元素个数。 
3语法scard key scard data
7scard data1
03.5 srem 
1命令srem 
2作用删除集合中的一个或多个成员元素不存在的成员元素会被忽略并返回成功删除的个数 
3语法srem key member [member …] 
#v8 v9不存在srem data v5 v7 v8 v9
23.6 spop 
1命令spop 
2作用随机删除集合中一个元素并返回该元素。 
3语法spop key spop data
v4 #删除的元素为v43.7 srandmember 
1命令srandmember 
2作用随机获取集合中 count 个元素但不会删除。 
3语法srandmember key [count] count 不填则随机获取一个元素。 srandmember data
v6srandmember data 1
v3srandmember data 2
v6
v1srandmember data 2
v2
v1srandmember data 4
v6
v3
v1
v23.8 smove 
1命令smove 
2作用将 member 元素从 source 集合移动到 destination 集合中成功移动返回1否则返回0 
3语法smove source destination member 注意 destination 集合可以不存在。如果 source 集合不存在或不包含指定的 member 元素则 smove 命令不执行任何操作仅返回0 。 smove data data2 v3
1smembers data2
v3smove data data2 v9
0smembers data
v6
v1
v23.9 sinter 
1命令sinter 
2作用返回两个集合的交集元素。 
3语法sinter key [key …] sadd data1 v2 v4 v5 v6 v1
5sadd data2 v4 v6 v8 v9 v0
5
#交集sinter data1 data2
v6
v4
#自己的话则全部sinter data1
v6
v5
v4
v2
v13.10 sunion 
1命令sunion 
2作用返回两个集合的并集元素。 
3语法sunion key [key …] sunion data1
v6
v4
v5
v2
v1
#并集sunion data1 data2
v6
v4
v9
v8
v1
v5
v2
v03.11 sdiff 
1命令sdiff 
2作用返回两个集合的差集元素要求在前者集合中的元素后者集合没有的元素 
3语法sdiff key [key …] sdiff data1
v6
v4
v5
v2
v1sdiff data1 data2
v5
v1
v2应用场景 
需要存放的数据不能重复的场景例如文章点赞、动态点赞签到打卡等需要获取多个数据源交集、并集、差集的场景例如共同好友、共同粉丝、关注的人等需要随机获取数据源中的元素的场景例如抽奖系统、随机等 
4、Hash哈希 介绍 
 Hash是一个键值对的集合。Hash 是一个 String 类型的 field字段 和 value值 的映射表hash特别适合用于存储对象。可以当做 Java 中的 MapString, String 对待。每一个 hash 可以存储 2^32-1 个键值对。 
常用命令 
4.1 hset/hget 
1命令 
hsethget 
2作用 
给 key 集合中的 field 赋值 value并返回成功设置的 field 个数返回 key 哈希中取出 field 字段的值。 
3语法 
hset key field value [field value …]hget key field 注意 如果哈希表不存在一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中旧值将被重写。 hset data id 9 name xiaobai age 22 sex nan
4hset data email 123.com
1hget data name
xiaobai4.2 hmset/hmget 
1命令 
hmsethmget 
2作用 
批量设置 key 中 field 字段的值批量获取 key 中 field 字段的值 
3语法 
hmset key field value [field value …]hmget key field [field …] hmget data id name age
9
xiaobai
224.3 hexists 
1命令hexists 
2作用判断指定 key 中是否存在 field存在则返回 1不存在则返回 0 
3语法 hexists data id
(integer) 1hexists data ids
(integer) 04.4 hkeys 
1命令hkeys 
2作用获取该哈希 key 中所有的 field 
3语法hkeys key hkeys data
id
name
age
sex
email4.5 hincrby 
1命令hincrby 
2作用为哈希表 key 中的 field 字段的值加上增量 increment并返回操作后的值 
3语法hincrby key field increment 注意 增量也可以为负数相当于对指定字段进行减法操作。如果哈希表的 key 不存在一个新的哈希表被创建并执行 hincrby 命令。如果指定的字段不存在那么在执行命令前字段的值被初始化为 0 。对一个储存字符串值的字段执行 hincrby 命令将造成一个错误。 hincrby data age 1
23hget data age
23hincrby data age -2
21hincrby data2 age 1
1hincrby data2 age2 5
5hkeys data2
age
age24.6 hdel 
1命令hdel 
2作用删除哈希表 key 中的一个或多个指定字段不存在的字段将被忽略并返回成功删除的个数 
3语法 hdel key field [field …] hdel data2 age age2 age3
24.7 hsetnx 
1命令hsetnx 
2作用给key哈希表中不存在的的字段赋值 即不覆盖原来的值设置成功返回 1设置失败返回 0 
3语法 hsetnx key field value 
#data中存在id字段hsetnx data id 99
0hset data ids 99
1应用场景 
存储对象信息例如购物车中的商品信息存储表的信息 
5、Zset有序集合 介绍 
 Zset与Set非常相似是一个没有重复元素的String集合。不同之处是Zset的每个元素都关联了一个分数score这个分数被用来按照从低分到高分的方式排序集合中的元素。集合的元素是唯一的但分数可以重复。 
 因为元素是有序的所以可以根据分数score或者次序position来获取一个范围内的元素。 
常用命令 
5.1 zadd 
1命令zadd 
2作用将一个或多个元素member及分数score加入到有序集 key 中 
3语法zadd key score member [score member …] 注意 如果某个元素已经是有序集的元素那么更新这个元素的分数值并通过重新插入这个元素来保证该元素在正确的位置上。分数值可以是整数值或双精度浮点数。如果有序集合 key 不存在则创建一个空的有序集并执行 zadd 操作。 zadd data 100 java 300 python 500 c
3zadd key 200 java
1zadd data 600.00 php
1zrange data 0 -1
java
python
c
php5.2 zrange 
1命令zrange 
2作用返回 key 集合中的索引 start 和索引 end 之间的元素包含 start 和 end 
3语法zrange key start end [withscores] 注意 其中元素的位置按分数值递增(从小到大)来排序。 其中 0 表示列表的第一个元素-1表示最后一个元素。withscores 是可选参数是否返回分数。 zrange data 0 1
java
pythonzrange data 0 1 withscores
java
100
python
3005.3 zrangebyscore 
1命令zrangebyscore 
2作用返回key集合中的分数minscore 和分数maxscore 之间的元素包含minscore 和maxscore 。其中元素的位置按分数值递增(从小到大)来排序。 
3语法 zrangebyscore key minscore maxscore [withscores] zrangebyscore data 300 500 withscores
python
300
c
5005.4 zrem 
1命令zrem 
2作用删除 key 集合下的 member 元素并返回成功删除的个数 
3语法zrem key member [member …] zrem data php
15.5 zincrby 
1命令zincrby 
2作用为元素 member 的 score 加上 increment 的值并返回处理后的值 
3语法 zincrby key increment member zincrby data 100 java
200zincrby data -100 c
4005.6 zcount 
1命令zcount 
2作用统计该集合在minscore 到maxscore分数区间中元素的个数 
3语法 zcount key minscore maxscore zcount data 100 300
25.7 zrank 
1命令zrank 
2作用返回 member 元素在集合中的排名从 0 开始。没有该元素则返回 null 
3语法 zrank key member zrank data java
0zrank data java1
null应用场景 
需要根据某个权重进行排序的场景例如微信步数排行榜、直播间送礼物排行榜、游戏中的段位排行榜需要存储的数据有优先级或重要程度的场景例如优先级任务队列 
五、Redis的三种特殊数据结构 
1、Bitmaps 
介绍 
 Bitmap 存储的是连续的二进制数字0 和 1通过 Bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态key 就是对应元素本身 8 个 bit 可以组成一个 byte所以 Bitmap 本身会极大的节省储存空间。可以将 Bitmap 看作是一个存储二进制数字0 和 1的数组数组中每个元素的下标叫做 offset偏移量。 
常用命令 
命令语法作用setbitsetbit key offset value设置Bitmaps中某个偏移量的值。getbitgetbit key offset获取Bitmaps中某个偏移量的值bitcountbitcount key [start end]统计字符串被设置为1的bit数量bitopbitop operation destkey key [key …]对一个或多个 Bitmap 进行运算可用运算符有 AND, OR, XOR 以及 NOT
应用场景 
需要保存状态信息的场景例如打卡天数、活跃用户情况、统计用户是否在线、登录天数等 
2、Geospatial 
介绍 
 GEO地理信息的缩写。该类型就是元素的二维坐标在地图上就是经纬度。Redis基于该类型提供了经纬度设置、查询、范围查询、距离查询、经纬度 Hash 等常见操作。 
常用命令 
命令语法作用geoaddgeoadd key longitude latitude member [longitude latitude member …]用于存储指定的地理空间位置可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。geoposgeopos key member [member ……]从给定的 key 里返回所有指定名称(member)的位置经度和纬度不存在的返回 nil。geodistgeodist key member1 member2 [m|km|ft|mi]用于返回两个给定位置之间的距离。m 米默认单位。km 千米。mi 英里。ft 英尺。georadiusgeoradius key longitude latitude radius m|km|ft|mi以给定的经纬度longitude latitude为中心 返回键包含的位置元素当中 与中心的距离不超过给定最大距离radius 的所有位置元素。
应用场景 
需要管理使用地理空间数据的场景附近的好友、两地之间的距离、附近的商场等 
3、Hyperloglog 
介绍 
HyperLogLog 是一种有名的基数计数概率算法 基于 LogLog Counting(LLC) 优化改进得来并不是 Redis 特有的Redis 只是实现了这个算法并提供了一些开箱即用的 API。 
Redis 提供的 HyperLogLog 占用空间非常非常小只需要 12k 的空间就能存储接近 2 * 64 个不同元素。并且Redis 对 HyperLogLog 的存储结构做了优化采用两种方式计数 
稀疏矩阵 计数较少的时候占用空间很小。稠密矩阵 计数达到某个阈值的时候占用 12k 的空间。 
常用命令 
命令语法作用pfaddpfadd key element [element]将所有元素参数添加到 Hyperloglog 数据结构中。如果内部有变动返回1没有返回0pfcountpfcount key [key]计算Hyperloglog 近似基数可以计算多个Hyperloglog 统计基数总数。pfmergepfmerge destkey sourcekey [sourcekey …]将一个或多个Hyperloglogsourcekey 合并成一个Hyperloglog destkey 
应用场景 
数据量巨大百万、千万级别以上的计数场景例如热门网站每日/每周/每月访问 ip 数统计基数统计 文章转载自: http://www.morning.rntgy.cn.gov.cn.rntgy.cn http://www.morning.hxxzp.cn.gov.cn.hxxzp.cn http://www.morning.dmzqd.cn.gov.cn.dmzqd.cn http://www.morning.bzpwh.cn.gov.cn.bzpwh.cn http://www.morning.wrbnh.cn.gov.cn.wrbnh.cn http://www.morning.zffn.cn.gov.cn.zffn.cn http://www.morning.mmynk.cn.gov.cn.mmynk.cn http://www.morning.rpth.cn.gov.cn.rpth.cn http://www.morning.bzkgn.cn.gov.cn.bzkgn.cn http://www.morning.rbtny.cn.gov.cn.rbtny.cn http://www.morning.jncxr.cn.gov.cn.jncxr.cn http://www.morning.jjzxn.cn.gov.cn.jjzxn.cn http://www.morning.srgwr.cn.gov.cn.srgwr.cn http://www.morning.wpmqq.cn.gov.cn.wpmqq.cn http://www.morning.hcrxn.cn.gov.cn.hcrxn.cn http://www.morning.yhyqg.cn.gov.cn.yhyqg.cn http://www.morning.yxshp.cn.gov.cn.yxshp.cn http://www.morning.lstmg.cn.gov.cn.lstmg.cn http://www.morning.lmcrc.cn.gov.cn.lmcrc.cn http://www.morning.gsjfn.cn.gov.cn.gsjfn.cn http://www.morning.yrjfb.cn.gov.cn.yrjfb.cn http://www.morning.tqhpt.cn.gov.cn.tqhpt.cn http://www.morning.fgsct.cn.gov.cn.fgsct.cn http://www.morning.wnnts.cn.gov.cn.wnnts.cn http://www.morning.yysqz.cn.gov.cn.yysqz.cn http://www.morning.ztfzm.cn.gov.cn.ztfzm.cn http://www.morning.xnpml.cn.gov.cn.xnpml.cn http://www.morning.lnsnyc.com.gov.cn.lnsnyc.com http://www.morning.zpfqh.cn.gov.cn.zpfqh.cn http://www.morning.lqklf.cn.gov.cn.lqklf.cn http://www.morning.bhrkx.cn.gov.cn.bhrkx.cn http://www.morning.jzfxk.cn.gov.cn.jzfxk.cn http://www.morning.xxwhz.cn.gov.cn.xxwhz.cn http://www.morning.mzgq.cn.gov.cn.mzgq.cn http://www.morning.xptkl.cn.gov.cn.xptkl.cn http://www.morning.knswz.cn.gov.cn.knswz.cn http://www.morning.yhyqg.cn.gov.cn.yhyqg.cn http://www.morning.rnqrl.cn.gov.cn.rnqrl.cn http://www.morning.xcxj.cn.gov.cn.xcxj.cn http://www.morning.fhddr.cn.gov.cn.fhddr.cn http://www.morning.brrxz.cn.gov.cn.brrxz.cn http://www.morning.qmsbr.cn.gov.cn.qmsbr.cn http://www.morning.ytbr.cn.gov.cn.ytbr.cn http://www.morning.gmysq.cn.gov.cn.gmysq.cn http://www.morning.hqbk.cn.gov.cn.hqbk.cn http://www.morning.cnprt.cn.gov.cn.cnprt.cn http://www.morning.pngfx.cn.gov.cn.pngfx.cn http://www.morning.prprj.cn.gov.cn.prprj.cn http://www.morning.trsmb.cn.gov.cn.trsmb.cn http://www.morning.drfcj.cn.gov.cn.drfcj.cn http://www.morning.qghjc.cn.gov.cn.qghjc.cn http://www.morning.ndmbd.cn.gov.cn.ndmbd.cn http://www.morning.flchj.cn.gov.cn.flchj.cn http://www.morning.grzpc.cn.gov.cn.grzpc.cn http://www.morning.qnsmk.cn.gov.cn.qnsmk.cn http://www.morning.mfzyn.cn.gov.cn.mfzyn.cn http://www.morning.rlwcs.cn.gov.cn.rlwcs.cn http://www.morning.lcjw.cn.gov.cn.lcjw.cn http://www.morning.tsqrc.cn.gov.cn.tsqrc.cn http://www.morning.tfrlj.cn.gov.cn.tfrlj.cn http://www.morning.jgcyn.cn.gov.cn.jgcyn.cn http://www.morning.mydgr.cn.gov.cn.mydgr.cn http://www.morning.kqyyq.cn.gov.cn.kqyyq.cn http://www.morning.mkhwx.cn.gov.cn.mkhwx.cn http://www.morning.plchy.cn.gov.cn.plchy.cn http://www.morning.zfyfy.cn.gov.cn.zfyfy.cn http://www.morning.qrgfw.cn.gov.cn.qrgfw.cn http://www.morning.rfycj.cn.gov.cn.rfycj.cn http://www.morning.qfcnp.cn.gov.cn.qfcnp.cn http://www.morning.gbhsz.cn.gov.cn.gbhsz.cn http://www.morning.qsctt.cn.gov.cn.qsctt.cn http://www.morning.frfpx.cn.gov.cn.frfpx.cn http://www.morning.wlggr.cn.gov.cn.wlggr.cn http://www.morning.bnkcl.cn.gov.cn.bnkcl.cn http://www.morning.lzwfg.cn.gov.cn.lzwfg.cn http://www.morning.zxfdq.cn.gov.cn.zxfdq.cn http://www.morning.tngdn.cn.gov.cn.tngdn.cn http://www.morning.cnkrd.cn.gov.cn.cnkrd.cn http://www.morning.fndmk.cn.gov.cn.fndmk.cn http://www.morning.jnoegg.com.gov.cn.jnoegg.com