文章目录

  • Docker使用redis
    • 1.拉取镜像
    • 2.Redis基本命令使用
      • a.键key
      • b.String命令
        • GETRANGE
        • GETSET
        • Append
        • Decrby
        • Incrby
        • Incrbyfloat
        • Strlen
        • GetBit SETBIT
        • DUMP
      • c.Hash命令
        • Hget
        • Hkeys
        • Hlen
        • Hvals
      • d.LIST命令
        • Lpush
        • Rpop
        • Rpush
        • Lset
        • Lrem
      • e.SET命令
        • Sunion
        • Sismember
        • Sdiff
        • Spop
        • Srem
      • f.ZSET命令
      • g.HyperLogLog命令
      • h.发布与订阅
    • 3.其他功能
      • a.数据备份与恢复
        • Redis 数据备份与恢复
        • 语法
        • 实例
        • 恢复数据
        • Bgsave
        • 实例
      • b.Redis安全
      • c.Redis 性能测试
        • 语法
      • d.Redis 分区
        • 分区的优势
        • 分区的不足
        • 分区类型
          • 范围分区
          • 哈希分区
      • e.Redis 管道技术
        • 实例
      • f.Redis GEO

Docker使用redis

1.拉取镜像

docker search redis  # 查询redis镜像
docker pull redis # 默认拉取最新版镜像 docekr pull redis:tag 指定版本
docker iamges # 查看是否拉取成功docker run -p 6379:6379 --name myredis -d redis # 指定映射端口,后台启动redis容器docker ps -a # 查看容器是否启动成功docker exec -it myredis redis-cli #进入redis客户端> PING #PING 命令,该命令用于检测 redis 服务是否启动。

2.Redis基本命令使用

Redis的命令大小写不敏感,但是key和value大小写敏感。

命令提供tab补全

a.键key

  • DEL KEY

存在则删除key,返回 (integer) 1 ,否则 (integer) 0

  • EXISTS key

检查给定 key 是否存在。

  • **keys *** 获取所有key

  • set key value 设置键和值,若已存在则会覆盖
  • get key 获取key的值,不存在返回nil
  • mset key1 value1 key2 value2 key3 value3 同时设置多个key-value
  • mget key1 key2 key3 同时获取多个key 的值

  • expire key 10 10秒过期,到期后会自动删除key

  • PEXPIRE key 1000 以毫秒为单位,设置过期时间,到期自动删除。

  • PERSIST key 移除给定 key 的过期时间,使得 key 永不过期。当过期时间移除成功时,返回 1 。 如果 key 不存在或 key 没有设置过期时间,返回 0

  • TTL key 当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。

  • PTTL key 当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。

  • RANDOMKEY 当数据库不为空时,返回一个 key 。 当数据库为空时,返回 nil (windows 系统返回 null)。

  • RENAME OLD_KEY_NAME NEW_KEY_NAME

    改名成功时提示 OK ,失败时候返回一个错误。

    当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。 当 NEW_KEY_NAME 已经存在时, RENAME 命令将覆盖旧值。

  • type key

    返回 key 的数据类型,数据类型有:

    • none (key不存在)
    • string (字符串)
    • list (列表)
    • set (集合)
    • zset (有序集)
    • hash (哈希表)
  • renamenx old_key new_key 命令用于在新的 key 不存在时修改 key 的名称,修改成功时,返回 1 。 如果 NEW_KEY_NAME 已经存在,返回 0 。

  • MOVE KEY_NAME DESTINATION_DATABASE 将当前数据库的 key 移动到给定的数据库 db 当中,移动成功返回 1 ,失败则返回 0 。

若key在原库中不存在 移动失败

若存在相同key,移动失败。

  • KEYS PATTERN 用于查找所有符合给定模式 pattern 的 key 。符合给定模式的 key 列表 (Array)。

  • expireat key_name TIME_IN_UNIX_TIMESTAMP 用于以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用。

  • SCAN cursor [MATCH pattern] [COUNT count]

SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。

SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FxZfZwLL-1646916295021)(C:\Users\HeHao\AppData\Roaming\Typora\typora-user-images\image-20220310193742197.png)]

  • select 0 选择第一个库(默认选择0)
    flush db      清除指定库

b.String命令

GETRANGE

GETRANGE KEY_NAME start end

截取得到的子字符串。

redis 127.0.0.1:6379> SET mykey "This is my test key"
OK
redis 127.0.0.1:6379> GETRANGE mykey 0 3
"This"
redis 127.0.0.1:6379> GETRANGE mykey 0 -1
"This is my test key"

GETSET

GETSET KEY_NAME VALUE

返回给定 key 的旧值。 当 key 没有旧值时,即 key 不存在时,返回 nil 。

当 key 存在但不是字符串类型时,返回一个错误。

redis> GETSET db mongodb    # 没有旧值,返回 nil
(nil)redis> GET db
"mongodb"redis> GETSET db redis      # 返回旧值 mongodb
"mongodb"redis> GET db
"redis"

Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。

SETNX KEY_NAME VALUE

Append

命令用于为指定的 key 追加值。

如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。

如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。

# 对不存在的 key 执行 APPENDredis> EXISTS myphone               # 确保 myphone 不存在
(integer) 0redis> APPEND myphone "nokia"       # 对不存在的 key 进行 APPEND ,等同于 SET myphone "nokia"
(integer) 5                         # 字符长度# 对已存在的字符串进行 APPENDredis> APPEND myphone " - 1110"     # 长度从 5 个字符增加到 12 个字符
(integer) 12redis> GET myphone
"nokia - 1110"

Decrby

命令将 key 所储存的值减去指定的减量值。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在 64 位(bit)有符号数字表示之内。

减去指定减量值之后, key 的值。

# 对已存在的 key 进行 DECRBYredis> SET count 100
OKredis> DECRBY count 20
(integer) 80# 对不存在的 key 进行DECRBYredis> EXISTS pages
(integer) 0redis> DECRBY pages 10
(integer) -10

Incrby

命令将 key 中储存的数字加上指定的增量值。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在 64 位(bit)有符号数字表示之内。


Incrbyfloat

命令为 key 中所储存的值加上指定的浮点数增量值。

如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。

执行命令之后 key 的值。

# 值和增量都不是指数符号redis> SET mykey 10.50
OKredis> INCRBYFLOAT mykey 0.1
"10.6"# 值和增量都是指数符号redis> SET mykey 314e-2
OKredis> GET mykey                # 用 SET 设置的值可以是指数符号
"314e-2"redis> INCRBYFLOAT mykey 0      # 但执行 INCRBYFLOAT 之后格式会被改成非指数符号
"3.14"# 可以对整数类型执行redis> SET mykey 3
OKredis> INCRBYFLOAT mykey 1.1
"4.1"# 后跟的 0 会被移除redis> SET mykey 3.0
OKredis> GET mykey                                    # SET 设置的值小数部分可以是 0
"3.0"redis> INCRBYFLOAT mykey 1.000000000000000000000    # 但 INCRBYFLOAT 会将无用的 0 忽略掉,有需要的话,将浮点变为整数
"4"redis> GET mykey
"4"

Strlen

命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。

字符串值的长度。 当 key 不存在时,返回 0。


GetBit SETBIT

怎么理解呢?什么是指定偏移量?
在计算机里所有的数据都是以二进制的形式存储的,每一个非中文字符占一个字节(Byte),中文字符占两个字节,而一个字节又是占8bit。
我们先设置一个key-value对:

在Redis中的存储形式转换成二进制就是:011000100110000101110010,而偏移量实际上指的就是从左往右数,偏移量是几就是第几位,偏移量0就是第0位。
言归正传,GETBIT的用法就是获取指定偏移量的bit,就很容易理解了吧,为了看清楚把上面的二进制换行一下

01100010
01100001
01110010

而第一个字符‘b’的每一位如下图所示:

相信看到这里大家应该就明白了GETBIT的用法,那么SETBIT也就不言而喻了。
设置或清除指定偏移量上的位(bit),指的就是修改指定偏移量的值,当然在二进制中只有0和1,如果设置其他的值就会报错:

那我们现在操作一下,把偏移量为2的bit修改成0,再打印出来:(01100010→01000010)

原来的‘b’就变成了’B’。

以上就是GETBIT和SETBIT的用法理解。


DUMP

命令用于序列化给定 key ,并返回被序列化的值。

序列化就是转化成计算机可理解的形式储存。


c.Hash命令

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

127.0.0.1:6379>  HMSET runoobkey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
OK
127.0.0.1:6379>  HGETALL runoobkey
1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"

在以上实例中,我们设置了 redis 的一些描述信息(name, description, likes, visitors) 到哈希表的 runoobkey 中。

Hget

命令用于返回哈希表中指定字段的值。

返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil 。

> HSET site redis redis.com
1
> HGET site redis
"redis.com"
> HGET site mysql
(nil)

Hkeys

命令用于获取哈希表中的所有域(field)。

包含哈希表中所有域(field)列表。 当 key 不存在时,返回一个空列表。

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HKEYS myhash
1) "field1"
2) "field2"

Hlen

命令用于获取哈希表中字段的数量。

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HLEN myhash
(integer) 2

Hvals

命令返回哈希表所有的值。


d.LIST命令

Lpush

命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。

127.0.0.1:6379> LPUSH list1 "foo"
(integer) 1
127.0.0.1:6379> LPUSH list1 "bar"
(integer) 2
127.0.0.1:6379> LRANGE list1 0 -1
1) "bar"
2) "foo"

Rpop

命令用于移除列表的最后一个元素,返回值为移除的元素。

redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> RPOP mylist
"three"
redis> LRANGE mylist 0 -1
1) "one"
2) "two"
redis>

Rpush

命令用于将一个或多个值插入到列表的尾部(最右边)。

如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。

Lset

通过索引来设置元素的值。

当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。

redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 4
redis 127.0.0.1:6379> LSET mylist 0 "bar"
OK
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1: "bar"
2) "hello"
3) "foo"
4) "hello"

Lrem

根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。

COUNT 的值可以是以下几种:

  • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
  • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
  • count = 0 : 移除表中所有与 VALUE 相等的值。
redis> RPUSH mylist "hello"
(integer) 1
redis> RPUSH mylist "hello"
(integer) 2
redis> RPUSH mylist "foo"
(integer) 3
redis> RPUSH mylist "hello"
(integer) 4
redis> LREM mylist -2 "hello"
(integer) 2
redis> LRANGE mylist 0 -1
1) "hello"
2) "foo"
redis>

e.SET命令

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

集合对象的编码可以是 intset 或者 hashtable。

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

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

redis 127.0.0.1:6379> SADD runoobkey redis
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mongodb
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mysql
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mysql
(integer) 0
redis 127.0.0.1:6379> SMEMBERS runoobkey1) "mysql"
2) "mongodb"
3) "redis"

Sunion

命令返回给定集合的并集。不存在的集合 key 被视为空集。

redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 1
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SUNION key1 key2
1) "a"
2) "c"
3) "b"
4) "e"
5) "d"
redis>

Sismember

命令判断成员元素是否是集合的成员。

如果成员元素是集合的成员,返回 1 。 如果成员元素不是集合的成员,或 key 不存在,返回 0 。

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SISMEMBER myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SISMEMBER myset1 "world"
(integer) 0

Sdiff

命令返回第一个集合与其他集合之间的差异,也可以认为说第一个集合中独有的元素。不存在的集合 key 将视为空集。

差集的结果来自前面的 FIRST_KEY ,而不是后面的 OTHER_KEY1,也不是整个 FIRST_KEY OTHER_KEY1…OTHER_KEYN 的差集。

实例:

redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 1
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SDIFF key1 key2
1) "a"
2) "b"
redis>

Spop

命令用于移除集合中的指定 key 的一个或多个随机元素,移除后会返回移除的元素。

该命令类似 Srandmember 命令,但 SPOP 将随机元素从集合中移除并返回,而 Srandmember 则仅仅返回随机元素,而不对集合进行任何改动。

redis> SADD myset "one"
(integer) 1
redis> SADD myset "two"
(integer) 1
redis> SADD myset "three"
(integer) 1
redis> SPOP myset
"one"
redis> SMEMBERS myset
1) "three"
2) "two"
redis> SADD myset "four"
(integer) 1
redis> SADD myset "five"
(integer) 1
redis> SPOP myset 3
1) "five"
2) "four"
3) "two"
redis> SMEMBERS myset
1) "three"
redis>

Srem

命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。

当 key 不是集合类型,返回一个错误。

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SREM myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SREM myset1 "foo"
(integer) 0
redis 127.0.0.1:6379> SMEMBERS myset1
1) "bar"
2) "world"

f.ZSET命令

Redis Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中。

如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。

分数值可以是整数值或双精度浮点数。

如果有序集合 key 不存在,则创建一个空的有序集并执行 ZADD 操作。

当 key 存在但不是有序集类型时,返回一个错误。

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 1 "uno"
(integer) 1
redis> ZADD myzset 2 "two" 3 "three"
(integer) 2
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"
redis>

g.HyperLogLog命令

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

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

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

什么是基数?

比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。

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

h.发布与订阅

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。

Redis 客户端可以订阅任意数量的频道。

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:


3.其他功能

a.数据备份与恢复

Redis 数据备份与恢复

Redis SAVE 命令用于创建当前数据库的备份。

语法

redis Save 命令基本语法如下:

redis 127.0.0.1:6379> SAVE

实例

redis 127.0.0.1:6379> SAVE
OK

该命令将在 redis 安装目录中创建dump.rdb文件。


恢复数据

如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令,如下所示:

redis 127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/redis/bin"

以上命令 CONFIG GET dir 输出的 redis 安装目录为 /usr/local/redis/bin。


Bgsave

创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。

实例

127.0.0.1:6379> BGSAVEBackground saving started

b.Redis安全

我们可以通过以下命令查看是否设置了密码验证:

127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""

默认情况下 requirepass 参数是空的,这就意味着你无需通过密码验证就可以连接到 redis 服务。

你可以通过以下命令来修改该参数:

127.0.0.1:6379> CONFIG set requirepass "runoob"
OK
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) "runoob"

AUTH 命令基本语法格式如下:

127.0.0.1:6379> AUTH password

c.Redis 性能测试

是通过同时执行多个命令实现的。

语法

redis 性能测试的基本命令如下:

redis-benchmark [option] [option value]

注意:该命令是在 redis 的目录下执行的,而不是 redis 客户端的内部指令。

以下实例我们使用了多个参数来测试 redis 性能:

$ redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 10000 -qSET: 146198.83 requests per second
LPUSH: 145560.41 requests per second

以上实例中主机为 127.0.0.1,端口号为 6379,执行的命令为 set,lpush,请求数为 10000,通过 -q 参数让结果只显示每秒执行的请求数。


d.Redis 分区

分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。

分区的优势

  • 通过利用多台计算机内存的和值,允许我们构造更大的数据库。
  • 通过多核和多台计算机,允许我们扩展计算能力;通过多台计算机和网络适配器,允许我们扩展网络带宽。

分区的不足

redis的一些特性在分区方面表现的不是很好:

  • 涉及多个key的操作通常是不被支持的。举例来说,当两个set映射到不同的redis实例上时,你就不能对这两个set执行交集操作。
  • 涉及多个key的redis事务不能使用。
  • 当使用分区时,数据处理较为复杂,比如你需要处理多个rdb/aof文件,并且从多个实例和主机备份持久化文件。
  • 增加或删除容量也比较复杂。redis集群大多数支持在运行时增加、删除节点的透明数据平衡的能力,但是类似于客户端分区、代理等其他系统则不支持这项特性。然而,一种叫做presharding的技术对此是有帮助的。

分区类型

Redis 有两种类型分区。 假设有4个Redis实例 R0,R1,R2,R3,和类似user:1,user:2这样的表示用户的多个key,对既定的key有多种不同方式来选择这个key存放在哪个实例中。也就是说,有不同的系统来映射某个key到某个Redis服务。

范围分区

最简单的分区方式是按范围分区,就是映射一定范围的对象到特定的Redis实例。

比如,ID从0到10000的用户会保存到实例R0,ID从10001到 20000的用户会保存到R1,以此类推。

这种方式是可行的,并且在实际中使用,不足就是要有一个区间范围到实例的映射表。这个表要被管理,同时还需要各 种对象的映射表,通常对Redis来说并非是好的方法。

哈希分区

另外一种分区方法是hash分区。这对任何key都适用,也无需是object_name:这种形式,像下面描述的一样简单:

  • 用一个hash函数将key转换为一个数字,比如使用crc32 hash函数。对key foobar执行crc32(foobar)会输出类似93024922的整数。
  • 对这个整数取模,将其转化为0-3之间的数字,就可以将这个整数映射到4个Redis实例中的一个了。93024922 % 4 = 2,就是说key foobar应该被存到R2实例中。注意:取模操作是取除的余数,通常在多种编程语言中用%操作符实现。

e.Redis 管道技术

Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:

  • 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
  • 服务端处理命令,并将结果返回给客户端。

Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。

实例

查看 redis 管道,只需要启动 redis 实例并输入以下命令:

$(echo -en "PING\r\n SET runoobkey redis\r\nGET runoobkey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379+PONG
+OK
redis
:1
:2
:3

以上实例中我们通过使用 PING 命令查看redis服务是否可用, 之后我们设置了 runoobkey 的值为 redis,然后我们获取 runoobkey 的值并使得 visitor 自增 3 次。

在返回的结果中我们可以看到这些命令一次性向 redis 服务提交,并最终一次性读取所有服务端的响应


f.Redis GEO

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。

Redis GEO 操作方法有:

  • geoadd:添加地理位置的坐标。
  • geopos:获取地理位置的坐标。
  • geodist:计算两个位置之间的距离。
  • georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
  • georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
  • geohash:返回一个或多个位置对象的 geohash 值。
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
redis> GEODIST Sicily Palermo Catania
"166274.1516"
redis> GEORADIUS Sicily 15 37 100 km
1) "Catania"
redis> GEORADIUS Sicily 15 37 200 km
1) "Palermo"
2) "Catania"
redis>

Docker使用redis相关推荐

  1. docker 实现redis集群搭建

    摘要:接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试下使用docker搭建redis集群. 首先,我们需要理论知识:Redis Cluster是Re ...

  2. Docker系列 六. Docker 安装 Redis

    Docker 安装 Redis Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 的 NoSQL 数据库,并提供多种语言的 API . ...

  3. docker 部署 redis

    1.搜索redis资源 docker search redis 2.拉取redis镜像 最好不要拉去 latest 后边版本不好管理 参考:<docker latest标签问题>https ...

  4. 基于Windows下使用Docker 部署Redis

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化. 1 去官网下载指定的版本 https:/ ...

  5. docker redis 配置文件_基于Docker搭建Redis一主两从三哨兵

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:oscarwin juejin.im/post/5d26b03de51d454fa3 ...

  6. docker run redis

    #拉取 Redis 镜像 C:\Users\WYJ>docker pull redis Using default tag: latest latest: Pulling from librar ...

  7. Docker 安装 Redis

    Docker 安装 Redis 方法一.docker pull redis:3.2 查找 Docker Hub上的 redis 镜像: docker search redis 这里我们拉取官方的镜像, ...

  8. Docker 安装redis(四)

    Docker 安装redis 1.搜索docker镜像(可以看到搜索的结果,这个结果是按照一定的星级评价规则排序的) docker search redis 2.拉取docker的mysql镜像(如果 ...

  9. docker安装redis提示没有日记写入权限_浅析Linux下Redis的攻击面(一)

    文章转自先知社区:https://xz.aliyun.com/t/7974 0x0 前言   Redis在内网渗透中常常扮演着重要的角色,其攻击方式非常多样化,在内网复杂的环境架构中容易出现各种问题, ...

  10. docker linux redis 安装

    1.docker redis 查询 docker search redis 2.下载 reids docker pull redis 3.启动 redis docker run -d -v /dock ...

最新文章

  1. SAP PLM进阶1 – 价值亮点
  2. 任务导向型对话系统——对话管理模型研究最新进展
  3. P1047 [NOIP2005 普及组] 校门外的树(python3实现)
  4. 公众号里面套页面_微信公众号页面模板有什么用?开通的方法是什么?
  5. Ansible结合跳板机控制远程服务器
  6. java 命令 native2ascii_java native2ascii.exe命令
  7. SharePoint 2010开发实例精选——通过客户端对象模型删除页面上的Web部件
  8. 使用工具类DbUtils连接数据库,并简单操作数据库
  9. 男人 30 岁前要做的 22 件事
  10. js 正则表达式判断非法字符以及常用正则表达式。
  11. 缓冲区溢出实例(一)--Windows
  12. 【直播预告】相机模型与标定——Real world超级公开课
  13. 什么是互联网营销?看一篇这就够了
  14. 做项目遇到的一些CSS问题
  15. iOS App跟小程序之间跳转
  16. 20175212童皓桢 《Java程序设计》第六周学习总结
  17. 灰鸽子--木马、后门实验
  18. 豆瓣电台WP7客户端 开发记录5
  19. 11B Cosmos 平台手写笔画显示比较滞后问题
  20. Javaweb笔记: 第02章_MySQL基础

热门文章

  1. 2019每特教育蚂蚁课堂-Java互联网微服务架构面试宝典v1
  2. android刷成苹果手机版下载地址,安卓怎么刷苹果系统 安卓变苹果系统方法教程...
  3. 怎样做计算机系统的镜像文件,Windows7 镜像制作过程 图文说明
  4. erps 单环基本原理
  5. 公开课丨苏杰新著来袭,十年之后再谈人人都是产品经理!
  6. Python 之pass 语句
  7. 数据统计学习的5个基本流程
  8. unity下载教育版_新的现场学习系列为Unity教育工作者提供支持
  9. Docker修改MySQL默认端口
  10. eclipse配置java开发环境_Java中Eclipse开发环境配置