Redis基础命令

  • redis基础
  • 基本数据类型
    • 1、String
    • 2、list
    • 3、hash
    • 4、set
    • 5、zset
  • 其他数据类型
    • HyperLogLog
    • bitmap 位图
    • Geospatial 地理位置

redis基础

首先说明一点 redis命令不区分大小写,下面直接演示

# windows启动redis命令,在redis安装目录打开cmd 输入以下命令即可开启redis
redis-server.exe redis.windows.conf
# 删除所有redis缓存
127.0.0.1:6379> flushdb
OK
#切换到第四个数据库
127.0.0.1:6379> select 3
OK
# 存入key为飞鱼值为redis的数据
127.0.0.1:6379[3]> set feiyu redis
OK
# 取出key为飞鱼的数据
127.0.0.1:6379[3]> get feiyu
"redis"
#删除key为feiyu的数据
127.0.0.1:6379[3]> del feiyu
(integer) 1
127.0.0.1:6379[3]> get feiyu
(nil)
# 检查给定的key是否存在(1存在  0不存在)
127.0.0.1:6379[3]> exists feiyu
(integer) 0#############################################
127.0.0.1:6379[3]> set feiyu v
OK
# 设置key的过期时间(单位 : 秒)
127.0.0.1:6379[3]> expire feiyu 500
(integer) 1
# 查询key的过期时间(单位秒)
127.0.0.1:6379[3]> ttl feiyu
(integer) 495
127.0.0.1:6379[3]> ttl feiyu
(integer) 492
# 查询key的过期时间(单位:毫秒)
127.0.0.1:6379[3]> pttl feiyu
(integer) 469976
# 查询key的类型
127.0.0.1:6379[3]> type feiyu
string
# 移除 key 的过期时间,key 将持久保持。
127.0.0.1:6379[3]> persist feiyu
(integer) 1
127.0.0.1:6379[3]> ttl feiyu
(integer) -1
# 修改 key 的名称
127.0.0.1:6379[3]> rename feiyu yu
OK
127.0.0.1:6379[3]> get yu
"v"

Redis 键相关的其他命令:

1 DUMP key 序列化给定 key ,并返回被序列化的值。
2 EXPIREAT key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受 的时间参数是 UNIX 时间戳(unix timestamp)。
3 PEXPIRE key milliseconds 设置 key 的过期时间亿以毫秒计。
4 PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
5 KEYS pattern 查找所有符合给定模式( pattern)的 key 。
6 MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中。
7 PTTL key 以毫秒为单位返回 key 的剩余的过期时间。
8 RANDOMKEY 从当前数据库中随机返回一个 key 。
9 RENAMENX key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。

基本数据类型

1、String

Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下:

# 设置指定 key 的值
127.0.0.1:6379[3]> set feiyu feiyuRedis
OK
# 获取指定key的值
127.0.0.1:6379[3]> get feiyu'
Invalid argument(s)
127.0.0.1:6379[3]> get feiyu
"feiyuRedis"
# 返回key字符串的子字符串(0到-1:表示获取全部)
127.0.0.1:6379[3]> getrange feiyu 0 -1
"feiyuRedis"
127.0.0.1:6379[3]> getrange feiyu 0 3
"feiy"
# 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
127.0.0.1:6379[3]> getset feiyu xiaoming
"feiyuRedis"
127.0.0.1:6379[3]> get feiyu
"xiaoming"
127.0.0.1:6379[3]> set xiaoming v1
OK
127.0.0.1:6379[3]> set xiaoli v2
OK
# 获取所有的key
127.0.0.1:6379[3]> keys *
1) "feiyu"
2) "xiaoming"
3) "xiaoli"
# 获取多个指定key的值
127.0.0.1:6379[3]> mget feiyu xiaoming xiaoli
1) "xiaoming"
2) "v1"
3) "v2"
# 只有在 key 不存在时设置 key 的值。
127.0.0.1:6379[3]> setnx feiyu vfeiyu
(integer) 0
127.0.0.1:6379[3]> setnx k1 v1
(integer) 1
# 返回字符串的长度
127.0.0.1:6379[3]> strlen feiyu
(integer) 8
# 同时设置多个key-value的值
127.0.0.1:6379[3]> mset k2 v2 k3 v3 k4 v4
OK
127.0.0.1:6379[3]> keys *
1) "k2"
2) "k4"
3) "feiyu"
4) "xiaoming"
5) "k3"
6) "xiaoli"
7) "k1"
127.0.0.1:6379[3]> set k6 1
OK
# 将key中存储的值增一
127.0.0.1:6379[3]> incr k6
(integer) 2
127.0.0.1:6379[3]> get k6
"2"
#  将 key 所储存的值加上给定的增量值
127.0.0.1:6379[3]> incrby k6 9
(integer) 11
# 将 key 中储存的数字值减一。
127.0.0.1:6379[3]> decr k6
(integer) 10
# key 所储存的值减去给定的减量值 。
127.0.0.1:6379[3]> decrby k6 5
(integer) 5
#  如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
127.0.0.1:6379[3]> append feiyu end
(integer) 11
127.0.0.1:6379[3]> get feiyu
"xiaomingend"

常用的 redis 字符串命令及描述:

1 SET key value 设置指定 key 的值
2 GET key 获取指定 key 的值。
3 GETRANGE key start end 返回 key 中字符串值的子字符
4 GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
5 GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
6 MGET key1 [key2..] 获取所有(一个或多个)给定 key 的值。
7 SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
8 SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
9 SETNX key value 只有在 key 不存在时设置 key 的值。
10 SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
11 STRLEN key 返回 key 所储存的字符串值的长度。
12 MSET key value [key value ...] 同时设置一个或多个 key-value 对。
13 MSETNX key value [key value ...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
14 PSETEX key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
15 INCR key 将 key 中储存的数字值增一。
16 INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 。
17 INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment) 。
18 DECR key 将 key 中储存的数字值减一。
19 DECRBY key decrement key 所储存的值减去给定的减量值(decrement) 。
20 APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。

2、list

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)

# 使用LPUSH 将值插入了名为 k 的列表当中。
127.0.0.1:6379[3]> lpush k mysql
(integer) 1
127.0.0.1:6379[3]> lpush k oracle
(integer) 2
127.0.0.1:6379[3]> lpush k redis
(integer) 3
127.0.0.1:6379[3]> lpush k es
(integer) 4
# 查询下标0 到5 之间的值
127.0.0.1:6379[3]> lrange k 0 5
1) "es"
2) "redis"
3) "oracle"
4) "mysql"
# 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
127.0.0.1:6379[3]> blpop k 3
1) "k"
2) "es"
# 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
127.0.0.1:6379[3]> brpop k 1
1) "k"
2) "mysql"
# 通过索引获取列表中的元素
127.0.0.1:6379[3]> lindex k 2
(nil)
127.0.0.1:6379[3]> lindex k 1
"oracle"127.0.0.1:6379[3]> lrange k 0 5
1) "redis"
2) "oracle"
# 获取列表长度
127.0.0.1:6379[3]> llen k
(integer) 2
# 将一个或多个值插入到列表头部
127.0.0.1:6379[3]> lpush k1 sqlserver mongdb mysql2 mysql3
(integer) 4
127.0.0.1:6379[3]> lrange k1 0 10
1) "mysql3"
2) "mysql2"
3) "mongdb"
4) "sqlserver"
# 将一个或多个值插入到已存在的列表头部
127.0.0.1:6379[3]> lpushx k1 redis
(integer) 5
127.0.0.1:6379[3]> lrange k1 0 10
1) "redis"
2) "mysql3"
3) "mysql2"
4) "mongdb"
5) "sqlserver"
# 移除列表元素
127.0.0.1:6379[3]> lrem k1 1 mysql2
(integer) 1
127.0.0.1:6379[3]> lrange k1 0 10
1) "redis"
2) "mysql3"
3) "mongdb"
4) "sqlserver"
# 通过索引设置列表元素的值 该索引一定要存在 索引从0开始
127.0.0.1:6379[3]> lset k1 4 redis1
(error) ERR index out of range
127.0.0.1:6379[3]> lset k1 0 redis1
OK
127.0.0.1:6379[3]> lrange k1 0 5
1) "redis1"
2) "mysql3"
3) "mongdb"
4) "sqlserver"
# 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
127.0.0.1:6379[3]> ltrim k1 2 3
OK
127.0.0.1:6379[3]> lrange k1 0 5
1) "mongdb"
2) "sqlserver"
#  移除并获取列表最后一个元素
127.0.0.1:6379[3]> rpop k1
"sqlserver"
# 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
127.0.0.1:6379[3]> rpoplpush k1 k2
"mongdb"
127.0.0.1:6379[3]> lrange k2 0 10
1) "mongdb"
127.0.0.1:6379[3]> lrange k1 0 10
(empty list or set)

列表相关的基本命令及描述:

1 BLPOP key1 [key2 ] timeout 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
2 BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
3 BRPOPLPUSH source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
4 LINDEX key index 通过索引获取列表中的元素
5 LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者后插入元素
6 LLEN key 获取列表长度
7 LPOP key 移出并获取列表的第一个元素
8 LPUSH key value1 [value2] 将一个或多个值插入到列表头部
9 LPUSHX key value 将一个或多个值插入到已存在的列表头部
10 LRANGE key start stop 获取列表指定范围内的元素
11 LREM key count value 移除列表元素
12 LSET key index value 通过索引设置列表元素的值
13 LTRIM key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
14 RPOP key 移除并获取列表最后一个元素
15 RPOPLPUSH source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
16 RPUSH key value1 [value2] 在列表中添加一个或多个值
17 RPUSHX key value 为已存在的列表添加值

3、hash

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
可以理解为key-map形式 即key-形式

# 同时将多个 field-value (域-值)对设置到哈希表 key 中。
127.0.0.1:6379[3]> hmset feiyu  name "feiyu" age 18 sex "man" like "redis"
OK
# 获取key中某一个field的值
127.0.0.1:6379[3]> hget feiyu name
"feiyu"
# 获取key中所有的属性和值
127.0.0.1:6379[3]> hgetall feiyu
1) "name"
2) "feiyu"
3) "age"
4) "18"
5) "sex"
6) "man"
7) "like"
8) "redis"
# 删除key中某一个字段以及字段的值
127.0.0.1:6379[3]> hdel feiyu like
(integer) 1
# 查询key中的field是否存在(0 不存在  1 存在)
127.0.0.1:6379[3]> hexists  feiyu like
(integer) 0
127.0.0.1:6379[3]> hexists  feiyu sex
(integer) 1
# 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
127.0.0.1:6379[3]> hincrby feiyu age 2
(integer) 20
# 获取所有哈希表中的字段
127.0.0.1:6379[3]> hkeys feiyu
1) "name"
2) "age"
3) "sex"
# 获取哈希表中字段的数量
127.0.0.1:6379[3]> hlen feiyu
(integer) 3
# 获取所有给定字段的值
127.0.0.1:6379[3]> hmget feiyu name age
1) "feiyu"
2) "20"
# 将哈希表 key 中的字段 field 的值设为 value 。 向指定key中添加field
127.0.0.1:6379[3]> hset feiyu db redis
(integer) 1
127.0.0.1:6379[3]> hgetall feiyu
1) "name"
2) "yufei"
3) "age"
4) "20"
5) "sex"
6) "man"
7) "db"
8) "redis"
# 只有在字段 field 不存在时,设置哈希表字段的值。
127.0.0.1:6379[3]> hsetnx feiyu name feiyu
(integer) 0
127.0.0.1:6379[3]> hsetnx feiyu color red
(integer) 1
127.0.0.1:6379[3]> hgetall feiyu1) "name"2) "yufei"3) "age"4) "20"5) "sex"6) "man"7) "size"8) "big"9) "color"
10) "red"

redis hash 基本命令及描述:

1 HDEL key field2 [field2] 删除一个或多个哈希表字段
2 HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。
3 HGET key field 获取存储在哈希表中指定字段的值/td>
4 HGETALL key 获取在哈希表中指定 key 的所有字段和值
5 HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment 。
6 HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
7 HKEYS key 获取所有哈希表中的字段
8 HLEN key 获取哈希表中字段的数量
9 HMGET key field1 [field2] 获取所有给定字段的值
10 HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。
11 HSET key field value 将哈希表 key 中的字段 field 的值设为 value 。
12 HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值。
13 HVALS key 获取哈希表中所有值
14 HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对。

4、set

Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

# 通过 SADD 命令向名为 feiyu 的集合插入元素
127.0.0.1:6379[3]> sadd feiyu redis
(integer) 1
127.0.0.1:6379[3]> sadd feiyu mongodb
(integer) 1
127.0.0.1:6379[3]> sadd feiyu mysql
(integer) 1
127.0.0.1:6379[3]> sadd feiyu oracle
(integer) 1
# 插入已经存在的元素--失败
127.0.0.1:6379[3]> sadd feiyu oracle
(integer) 0
127.0.0.1:6379[3]> sadd feiyu sqlserver
(integer) 1
# 查看集合feiyu中的所有元素
127.0.0.1:6379[3]> smembers feiyu
1) "mysql"
2) "mongodb"
3) "redis"
4) "oracle"
5) "sqlserver"
# 获取集合的成员数
127.0.0.1:6379[3]> scard feiyu
(integer) 5
127.0.0.1:6379[3]> sadd fei redis oracle mysql nosql db sql
(integer) 6
127.0.0.1:6379[3]> scard fei
(integer) 6
# 返回给定所有集合的差集 以第一个key为主
127.0.0.1:6379[3]> sdiff feiyu fei
1) "mongodb"
2) "sqlserver"
127.0.0.1:6379[3]> sdiff fei feiyu
1) "nosql"
2) "sql"
3) "db"
# 返回给定所有集合的交集
127.0.0.1:6379[3]> sinter feiyu fei
1) "redis"
2) "oracle"
3) "mysql"
# 判断 member 元素是否是集合 key 的成员
127.0.0.1:6379[3]> sismember feiyu sql
(integer) 0
127.0.0.1:6379[3]> sismember feiyu redis
(integer) 1
# 移除并返回集合中的一个随机元素
127.0.0.1:6379[3]> spop feiyu
"redis"
127.0.0.1:6379[3]> spop feiyu
"sqlserver"
# 返回集合中一个或多个随机数(可以指定返回的个数 默认为一个)
127.0.0.1:6379[3]> SRANDMEMBER feiyu 2
1) "oracle"
2) "mysql"
127.0.0.1:6379[3]> SRANDMEMBER feiyu
"mysql"
# 移除集合中一个或多个成员
127.0.0.1:6379[3]> srem feiyu mysql
(integer) 1
# 返回所有给定集合的并集
127.0.0.1:6379[3]> sunion feiyu fei
1) "mongodb"
2) "db"
3) "redis"
4) "nosql"
5) "oracle"
6) "sql"
7) "mysql"

Redis 集合基本命令及描述::

1 SADD key member1 [member2] 向集合添加一个或多个成员
2 SCARD key 获取集合的成员数
3 SDIFF key1 [key2] 返回给定所有集合的差集
4 SDIFFSTORE destination key1 [key2] 返回给定所有集合的差集并存储在 destination 中
5 SINTER key1 [key2] 返回给定所有集合的交集
6 SINTERSTORE destination key1 [key2] 返回给定所有集合的交集并存储在 destination 中
7 SISMEMBER key member 判断 member 元素是否是集合 key 的成员
8 SMEMBERS key 返回集合中的所有成员
9 SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合
10 SPOP key 移除并返回集合中的一个随机元素
11 SRANDMEMBER key [count] 返回集合中一个或多个随机数
12 SREM key member1 [member2] 移除集合中一个或多个成员
13 SUNION key1 [key2] 返回所有给定集合的并集
14 SUNIONSTORE destination key1 [key2] 所有给定集合的并集存储在 destination 集合中
15 SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素

5、zset

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

# 向有序集合添加一个或多个成员,或者更新已存在成员的分数
127.0.0.1:6379[3]> zadd feiyu 1 mysql 2 redis 3 oracle 4 mongodb 5 sqlserver
(integer) 5
# 获取有序集合的成员
127.0.0.1:6379[3]> zrange feiyu 0 -1
1) "mysql"
2) "redis"
3) "oracle"
4) "mongodb"
5) "sqlserver"
# 获取有序集合的成员数
127.0.0.1:6379[3]> zcard feiyu
(integer) 5
# 计算在有序集合中指定区间分数的成员数
127.0.0.1:6379[3]> zcount feiyu -1 6
(integer) 5
127.0.0.1:6379[3]> zcount feiyu 2 4
(integer) 3
127.0.0.1:6379[3]> zcount feiyu 2 7
(integer) 4
127.0.0.1:6379[3]> zcount feiyu 5 7
(integer) 1
# 有序集合中对指定成员的分数加上增量 increment
127.0.0.1:6379[3]> zincrby feiyu 1 sqlserver
"6"
# 通过索引区间返回有序集合成指定区间内的成员
127.0.0.1:6379[3]> zrange feiyu 0 1
1) "mysql"
2) "redis"
#  通过分数返回有序集合指定区间内的成员
127.0.0.1:6379[3]> zrangebyscore feiyu 2 3
1) "redis"
2) "oracle"
# 返回有序集合中指定成员的索引
127.0.0.1:6379[3]> zrank feiyu redis
(integer) 1
# 移除有序集合中的一个或多个成员
127.0.0.1:6379[3]> zrem feiyu sqlserver
(integer) 1
# 返回有序集中指定区间内的成员,通过索引,分数从高到底
127.0.0.1:6379[3]> zrevrange feiyu 0 3
1) "mongodb"
2) "oracle"
3) "redis"
4) "mysql"
# 返回有序集中,成员的分数值
127.0.0.1:6379[3]> zscore feiyu redis
"2"

redis 有序集合的基本命令及描述:

1 ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
2 ZCARD key 获取有序集合的成员数
3 ZCOUNT key min max 计算在有序集合中指定区间分数的成员数
4 ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment
5 ZINTERSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
6 ZLEXCOUNT key min max 在有序集合中计算指定字典区间内成员数量
7 ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合成指定区间内的成员
8 ZRANGEBYLEX key min max [LIMIT offset count] 通过字典区间返回有序集合的成员
9 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 通过分数返回有序集合指定区间内的成员
10 ZRANK key member 返回有序集合中指定成员的索引
11 ZREM key member [member ...] 移除有序集合中的一个或多个成员
12 ZREMRANGEBYLEX key min max 移除有序集合中给定的字典区间的所有成员
13 ZREMRANGEBYRANK key start stop 移除有序集合中给定的排名区间的所有成员
14 ZREMRANGEBYSCORE key min max 移除有序集合中给定的分数区间的所有成员
15 ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到底
16 ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序
17 ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
18 ZSCORE key member 返回有序集中,成员的分数值
19 ZUNIONSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的并集,并存储在新的 key 中
20 ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值)

其他数据类型

HyperLogLog

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。

在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。

场景:
如网页的 UV (一个人访问一个网站多次,但是还是算作一个人!)
通过使用一种特殊的算法,而达到使用一个固定空间达到统计基数的作用。
这种算法有误差,是一种概率学问题。0.81% 错误率! 但对于统计UV这类的任务,是可以忽略不计的!
测试使用
如果允许有误差,那么一定可以使用 Hyperloglog !
如果不允许误差,就使用 set 或者自己的数据类型即可!

127.0.0.1:6379> PFADD key "redis"
1) (integer) 1
127.0.0.1:6379> PFADD key "mongodb"
1) (integer) 1
127.0.0.1:6379> PFADD key "mysql"
1) (integer) 1
127.0.0.1:6379> PFCOUNT key
(integer) 3

redis HyperLogLog 的基本命令:

1 PFADD key element [element ...] 添加指定元素到 HyperLogLog 中。
2 PFCOUNT key [key ...] 返回给定 HyperLogLog 的基数估算值。
3 PFMERGE destkey sourcekey [sourcekey ...] 将多个 HyperLogLog 合并为一个 HyperLogLog

bitmap 位图

场景;
公司记录某个人一个月的打卡情况
一年365天怎么记录一个人在某个网站的登录,活跃情况

两个状态的都能用这种方法进行性能压榨

# 对不存在的 key 或者不存在的 offset 进行 GETBIT, 返回 0
127.0.0.1:6379> EXISTS bit
(integer) 0
127.0.0.1:6379> GETBIT bit 113
(integer) 0# 对已存在的 offset 进行 GETBIT
127.0.0.1:6379> SETBIT bit 113 1
(integer) 0
127.0.0.1:6379> GETBIT bit 113
(integer) 1
#######################################################
BITCOUNT key [start end]summary: Count set bits in a stringsince: 2.6.0含义:得到总数
举例:
127.0.0.1:6379> SETBIT mykeys 10 1
(integer) 0
127.0.0.1:6379> SETBIT mykeys 11 1
(integer) 0
127.0.0.1:6379> SETBIT mykeys 21 1
(integer) 0
127.0.0.1:6379> SETBIT mykeys 10 2
(integer) 0
127.0.0.1:6379> BITCOUNT mykeys
(integer) 4
#######################################################
# 都是操作二进制位来进行记录,就只有0 和 1 两个状态!
365 天 = 365 bit 1字节 = 8bit 46 个字节左右!
# 测试登录次数
127.0.0.1:6379> setbit login 0 1
(integer) 0
127.0.0.1:6379> setbit login 3 1
(integer) 0
127.0.0.1:6379> bitcount login 0 -1
(integer) 2# 周一:1 周二:0 周三:0 周四:1 ......
# 查看某一天是否有打卡!
# 统计操作,统计 打卡的天数!

Geospatial 地理位置

场景;
朋友的定位,附近的人,打车距离计算?
在Redis3.2 版本推出了Geospatial ! 这个功能可以推算地理位置的信息,两地之间的距离。
可以查询一些测试数据

给定几个城市的经纬度:

太原:112.549248,37.857014

北京:116.405285,39.904989

成都:104.065735,30.659462

武汉:114.298572,30.584355

西安: 108.948024,34.263161

洛阳:112.434468,34.663041

getadd
# getadd 添加地理位置
# 规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入!
# 有效的经度从-180度到180度。
# 有效的纬度从-85.05112878度到85.05112878度。# 当坐标位置超出上述指定范围时,该命令将会返回一个错误。
# 127.0.0.1:6379> geoadd china:city 39.90 116.40 beijing
(error) ERR invalid longitude,latitude pair 39.900000,116.400000
# 参数 key 值()#插入城市的经纬度
127.0.0.1:6379> geoadd china:city 112.549284 37.857014 taiyuan
127.0.0.1:6379> geoadd china:city 116.405285 39.904989 beijing
127.0.0.1:6379> geoadd china:city 104.065735 30.659462 chengdu
127.0.0.1:6379> geoadd china:city 114.298572 30.584355 wuhan
127.0.0.1:6379> geoadd china:city 108.948024 34.263161 xian
127.0.0.1:6379> geoadd china:city 112.434468 34.663041 luoyang# 获取指定的城市的经度和纬度!
127.0.0.1:6379> geopos china:city beijing
1) 1) "116.40528291463851929"2) "39.9049884229125027"
127.0.0.1:6379> geopos china:city beijing luoyang
1) 1) "116.40528291463851929"2) "39.9049884229125027"
2) 1) "112.43446558713912964"2) "34.6630405862934694"#两人之间的距离!
#单位:
#m 表示单位为米。
#km 表示单位为千米。
#mi 表示单位为英里。
#ft 表示单位为英尺。
#georadius 以给定的经纬度为中心, 找出某一半径内的元素
#我附近的人? (获得所有附近的人的地址,定位!)通过半径来查询!
#获得指定数量的人,200
#所有数据应该都录入:china:city ,才会让结果更加请求!
#查询太原到北京的距离
127.0.0.1:6379> geodist china:city beijing taiyuan
"404109.2735"
127.0.0.1:6379> geodist china:city beijing taiyuan km
"404.1093"#找某个地点(微信定位)方圆1000km内的城市,附近的朋友
127.0.0.1:6379> georadius china:city 110 32 500 km
1) "xian"
2) "luoyang"
3) "wuhan"# 找出位于指定元素周围的其他元素!
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km
1) "taiyuan"
2) "beijing"
3) "xian"
4) "luoyang"# 查看地图中全部的元素
127.0.0.1:6379> ZRANGE china:city 0 -1
1) "chengdu"
2) "xian"
3) "luoyang"
4) "wuhan"
5) "taiyuan"
6) "beijing"# 移除指定元素!
127.0.0.1:6379> zrem china:city beijing
(integer) 1

整理不易 请您一件三连 蟹蟹!!!
注:想要看视频学习的 请前往:https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0&vd_source=b190127f69e6ab412a8d105e86347543

数据库-初识Redis(基础命令)相关推荐

  1. redis基础命令和数据操作命令学习笔记

    redis基础命令和数据操作命令学习笔记 基础命令 安装成功后,redis的启动命令:先修改配置文件.将服务改成默认运行.然后以配置文件启动服务 redis-server config/redis-c ...

  2. 初识redis(redis基础命令)

    redis简介 redis是一个开源(BSD许可)的使用C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,它可以用作数据库.缓存和消息中间件,并提供多种语言的API.从20 ...

  3. 【redis】redis基础命令,分布式锁,缓存问题学习大集合

    写在前面 Redis是一个高速的内存数据库,它的应用十分广泛,可以说是服务端必学必精的东西.然而,学以致用,无用则无为.学了的东西必须反复的去用,去实践,方能有真知.这篇文章记录了我在redis学习过 ...

  4. 数据库MySQL--常见基础命令

    基础命令: 查看所有数据库:show databases; 打开指定的数据库:use 库名: 查看当前库的所有表:show tables; 查看数据库其他库中的表:show tables from 库 ...

  5. 【数据库】Oracle基础命令

    Win+R输入cmd调出dos窗口,输入sqlplus 命令后,输入oracle数据库的用户名和密码,进入SQL命令,才能执行创建表空间.创建用户.用户授权等基础命令. 一.创建表空间 TABLESP ...

  6. windows下使用redis,Redis入门使用,Redis基础命令

    一.Redis的使用 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis 优势 性能极高 –  ...

  7. MySQL数据库入门———常用基础命令

    mysql 连接数据库命令: MySQL 连接本地数据库,用户名为"root",密码"123"(注意:"-p"和"123" ...

  8. Linux初识及基础命令

    一 .什么是linux 1.linux指的是linux的内核 2.我们所说的操作系统是linux的内核+GNU组织的软件 GNU/linux 二.什么是shell 1.shell是一个解释器 2.sh ...

  9. Redis基础命令(set类型)交集并集差集

    目录 概述: 特征: Set常见命令: 1.Sadd key number..:向set中添加一个或多个元素 2.Srem key number...:移除set中指定的元素 3.Scard key: ...

最新文章

  1. mysql 导出用户权限_MySQL中导出用户权限设置的脚本分享
  2. Java黑皮书课后题第2章:*2.17(科学:风寒温度)外面有多冷?...twc=35.74+0.6215ta-35.75v0.16+0.4275tav0.16,输入度数、风速显示风寒温度
  3. oracle输出xml文件格式,在oracle中通过字段信息生成xml文件
  4. jquery评分效果Rating精华版
  5. 手机上python编程工具3和3h有区别吗_Python3.5内置模块之time与datetime模块用法实例分析...
  6. input最大长度限制问题
  7. C++ vs ini GetPrivateProfileInt的使用和说明;带一个实例
  8. 【自然语言处理系列】预训练模型原理和实践综述 | 附汇报PPT原稿和18篇论文
  9. staruml怎么画协作图_er图怎么画?轻松绘制专业er图的软件
  10. 数据分析实战(五)基于R语言的Kmean聚类分析实战
  11. 污水处理成本高怎么办?智能网关+云平台提供你完美解决方案
  12. mfc改计算机名称,VC获取并修改计算机屏幕分辨率(MFC)
  13. 1.7-秩和相关关系
  14. C语言:extern用法
  15. 图书管理系统之普通用户、超级管理员页面布局(四)
  16. java 打印大小设置_使用QPrinter设置自定义纸张尺寸无法正确打印
  17. 【高项】人力资源管理(ITTO)
  18. 如何在Java中将汉字转成汉语拼音
  19. 6轴机械手控制系统DEMO
  20. Java游戏服务器开发之A星算法

热门文章

  1. 全国计算机等级考试试题研究组,全国计算机等级考试命题研组
  2. 速归解决年龄问题c语言,队危速归,VG官宣Kkoma教练离队,T1和李哥需要我?
  3. Java程序员:java游戏开发引擎
  4. antd-mobile InfiniteScroll 无限滚动
  5. 对《移动互联网白皮书(2013年)》的几个解读
  6. 开发互联网医院系统创造智慧医疗新篇章|互联网系统源码搭建
  7. 浅析关河因果“逻辑规则+机器学习”
  8. 关于uni-app的资源热更新!!!
  9. 脸部动作编码系统(FACS)应用
  10. 记录小程序后端开发环境配置