Redis基础入门
都依凡
撰写于 2023年 05月 15 日

Redis基础入门

0.为什么Redis是单线程还这么快?

redis 是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程 (CPU上下文会切换:耗时的操作!!!),对于内存系统来说,如果没有上下文切换效率就是最高 的!多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案!

1. Redis介绍

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings)散列(hashes)列表(lists)集合(sets)有序集合(sorted sets) 与范围查询, bitmapshyperloglogs地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication)LUA脚本(Lua scripting)LRU驱动事件(LRU eviction)事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

2. 关系型数据库和非关系型数据库

  • 关系型数据库(RDBMS):表格 ,行 ,列
泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代!尤其
是超大规模的高并发的社区!
暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的,而
且是我们当下必须要掌握的一个技术!
很多的数据类型用户的个人信息,社交网络,地理位置。这些数据类型的存储不需要一个固定的格式!
不需要多余的操作就可以横向扩展的 ! Map<String,Object> 使用键值对来控制
  • 非关系型数据库(NOSQL)
NOSQL:不仅仅是SQL
- 不仅仅是数据
- 没有固定的查询语言
- 键值对存储,列存储,文档存储,图形数据库(社交关系)
- 最终一致性,
- CAP定理和BASE (异地多活) 初级架构师!

1. redis能做什么

  1. 内存存储、持久化,内存中是断电即失、所以说持久化很重要(rdb、aof)
  2. 效率高,可以用于高速缓存
  3. 发布订阅系统
  4. 地图信息分析
  5. 计时器、计数器(浏览量!)

2. redis特点

  1. 特性
  2. 多样的数据类型
  3. 持久化
  4. 集群
  5. 事务

3. Redis安装Linux

中文官网:CRUG网站 (redis.cn)

英文官网:Redis

在官网中下载Redis的最新稳定版本即可,Redis是建议安装的,Linux可以下载.gz压缩文件,将压缩包解压到Linux服务器即可安装成功(我们可以解压到linux服务器中的/opt/目录中)

142

4. 基本环境安装

  1. 下载C++环境
yum install gcc-c++
make
make install
  • 注意
  • 安装 redis执行make命令报错struct redisServer’没有名为‘sentinel_mode’的成员

报错如图:

143

1.解决安装 redis执行make命令报错struct redisServer’没有名为‘sentinel_mode’的成员

  1. 查看gcc的版本是否在 5.3以上 命令:gcc -v
  2. \#升级到 5.3及以上版本命令:

    1. yum -y install centos-release-scl
    2. yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
    3. scl enable devtoolset-9 bash
执行完毕之后去到src目录下执行make即可编译成功

5. 启动Redis

目前我使用的Linux centos 7 和Redis 6.X

1.普通方式启动Redis

  1. 使用 cd 命令进入Redis的安装目录,如:cd /opt/redis/src/
  2. 查询目录下是否拥有 redis.server 如果有直接执行命令:./redis.server 若没有可以去目录 ·/usr/local/bin查找,然后执行./redis.server
  3. 见到如图就是启动成功了

144

我们会发现无法使用命令进行操作,这是因为redis的启动占用了当前线程,紧接着介绍第二种启动方式,也就是后台启动,是最常用的启动方式

2. 后台线程方式启动Redis

  1. 进入redis安装目录寻找配置后台启动配置文件redis.conf
  2. 使用vi redis.conf命令编辑配置文件
  3. 可以使用/ 命令查找对应的配置字母,修改如下配置值为yes

145

  1. 使用命令wq 保存退出
  2. 然后使用在安装目录使用命令./src/redis-server redis.conf (每个人的路径可能不一样,大概意思就是在启动方式1的基础上加上了配置文件的也叫配置文件启动方式)
  3. 查询是否启动成功ps -ef | grep redis 找到redis的进程即是启动成功

3. 关闭服务

在可以直接使用Linux命令将线程kill掉,也可以在客户端工具中执行shutdown命令

6. Redis客户端工具

客户端工具的目录在Redis的安装目录中的/src/目录下,名称叫做redis.cli

  • 启动命令
./redis.cli
当输入命令更改为:127.0.0.1:6379> 即为进入客户端工具成功
  • 退出

可以使用ctrl+c直接强制退出

可以命令ping 查看是否可以正常执行,返回PONG即表示成功

7. Redis基础命令

1. Redis的默认数据库

  • redis默认有16个数据库,默认使用的是第0个数据库,可以使用select n 进行切换数据库
select 3 # 切换数据库到第三个
DBSIZE # 查看数据库的大小

2. 清空Redis数据库

  • 清空当前数据库:flushdb
  • 清空全部数据库的内容:flushall

3. 查看所有的key

keys * # 查看所有的数据库

8. Redis String(字符串)命令

1. Setnx命令

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

语法:

setnx <k> <v> # 如 key 为 name v 为 张三
setnx <k> <v> # 在第二次添加时,key为name时,不论值为什么都会添加失败

2. getRange命令截取

getRange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。

语法:

# 设置一个k v数据
SET mykey "This is my test key"
getrange mykey 0 3
# 输出 "This"
getrange mykey 0 -1
# 输出 "This is my test key"

3. Mset命令

Mset 命令用于同时设置一个或多个 key-value 对。

# 设置多个k v键值对
mset k1 "Hello" k2 "World"

4. Setex命令

Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, Setex 命令将会替换旧的值。

setex k1 60 "v1"
# 设置 60秒过期的k1 值为 v1

5.set命令

SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。

# 设置一个键值对 k1 v1
set k1 v1

6. get命令

返回对应 key 的value值,如果 key 不存在时,返回 nil。 如果 key 不是字符串类型,那么返回一个错误

GET db # 不存在返回 nil

7. getBit命令

Getbit 命令用于对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

# 对不存在的 key 或者不存在的 offset 进行 GETBIT, 返回 0
 
redis> EXISTS bit
(integer) 0
 
redis> GETBIT bit 10086
(integer) 0
 
 
# 对已存在的 offset 进行 GETBIT
 
redis> SETBIT bit 10086 1
(integer) 0
 
redis> GETBIT bit 10086
(integer) 1

8. setBit命令

Setbit 命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

setbit bit 10086 1
getbit bit 10086

9.Decr命令

Decr 命令将 key 中储存的数字值减一。

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

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

set k1 10

decr k1 # 返回 9
# 对不存在的key值进行decr

decr k2 # 不存在赋值初始为0 再减一所以返回 -1

set k3 "hello"

decr k3 # 存在但不是数值的key会返回一个错误

10. decrBy命令

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

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

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

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

set k1 100

decrby k1 20 # K1 减去20 返回 80
# 其余的特点和decr一样

11. Strlen命令

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

set k1 "hello word"

strlen k1 # 返回k1的字符串长度 11

# 若k不存在返回 0

12. Msetnx命令

Msetnx 命令用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对。

当所有 key 都成功设置,返回 1 。 如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0

# 对不存在的 key 进行 MSETNX
 
MSETNX rmdbs "MySQL" nosql "MongoDB" key-value-store "redis" # 添加多个k v键值对
 
MGET rmdbs nosql key-value-store # 查询多个k v 键值对
1) "MySQL"
2) "MongoDB"
3) "redis"
 
 
# MSET 的给定 key 当中有已存在的 key
 
Msetnx rmdbs "Sqlite" language "python"  # rmdbs 键已经存在,操作失败

# 因为 MSET 是原子性操作,language 没有被设置
 
GET rmdbs     # rmdbs 也没有被修改 输出 MySQL

13. ncrby命令

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

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

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

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

# key 存在且是数字值
 
SET rank 50 # 添加一个k

INCRBY rank 20 # rank存在添加20 返回70

# key 不存在时

INCRBY counter 30 # 不存在,初始化0返回30
 
# key 不是数字值时
SET book "long long ago..."
INCRBY book 200 # book 值不是数字,报错

14. Incrbyfloat命令

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

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

# 值和增量都不是指数符号
SET mykey 10.50 # 设置myke 值为10.50
 
incrbyfloat mykey 0.1 # mykey的值增加0.1
 
# 值和增量都是指数符号
 
SET mykey 314e-2 # 设置mykey值为 314e-2

GET mykey  # 用 SET 设置的值可以是指数符号"314e-2"
 
incrybyfloat mykey 0      # 但执行 INCRBYFLOAT 之后格式会被改成非指数符号
"3.14"
 
# 可以对整数类型执行
 
SET mykey 3

INCRBYFLOAT mykey 1.1 # 对整数类型数据增加1.1
# 后跟的 0 会被移除
SET mykey 3.0
GET mykey                                   # SET 设置的值小数部分可以是 0 显示 "3.0"
 
INCRBYFLOAT mykey 1.000000000000000000000    # 但 INCRBYFLOAT 会将无用的 0 忽略掉,有需要的话,将浮点变为整数
GET mykey 返回 "4"

15.Setrange命令

Setrange 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。

set k1 "hello" #设置k1 的值为 hello 
setrange k1 1 "333" # 将k1 从索引2开始替换三个位数的字符,会替换掉ell 会返回h333o

16. psetex命令

Psetex 命令以毫秒为单位设置 key 的生存时间。

psetex的使用方法和setex的使用方法一样,只不过设置的过期时间是以毫秒为单位

17. Append 命令

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

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

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

append k1 "test" # 当k1不存在的时候会创建k1 值为 test等同于 set k1 "test"

set k2 "demo"
appent k2 "add" # 当k2存在的时候,会将字符添加到原来的值后面,会返回字符长度

18. getSet命令

Getset 命令用于设置指定 key 的值,并返回 key 旧的值。

set name "hello" # 设置一个初始k
getset name "word" # 会返回显示hello,然后将name的值设置为word
get name #这个时候name的值是word

19. Mget

Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil

set k1 "v1" # 添加
set k2 "v2" # 添加
mget k1 k2 k3 # 获取多个 不存在返回 nil

1) "v1"
2) "v2"
3) (nil)

20. Incr命令

Incr 命令将 key 中储存的数字值增一。

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

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

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

set k1 20 
incr k1  # k1 加一
get k1 # 返回21

9.Redis 哈希(Hash)命令

1.Hmset命令和Hset命令

Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。

此命令会覆盖哈希表中已存在的字段。

如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作

hset k1 f1 "k1-vf1" f2 "k1-vf2"  # hmset和hset使用方式一样,不过hmset在官方文档中说已经弃用
hget k1 f1 # hget

2. Hmget命令

Hmget 命令用于返回哈希表中,一个或多个给定字段的值。

如果指定的字段不存在于哈希表,那么返回一个 nil 值。

hset k1 f1 "k1-vf1" f2 "k1-vf2"
hmget k1 f1 f2 # hmget可以通过多个fild 获取到值

3. Hgetall命令

命令用于返回哈希表中,所有的字段和值。

在返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍。

hset k1 fd1 fdv1 fd2 fdv2 fd3 fdv3 #添加数据

hgetall k1 # 查询数据

# 输出结果 前面是fdkey 后面跟着他的fdvalue
1) "fd1"
2) "fdv1"
3) "fd2"
4) "fdv2"
5) "fd3"
6) "fdv3"

4. Hget命令

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

# 字段存在
HSET site redis redis.com

HGET site redis # 输出结果"redis.com" 不存在返回nil

5. Hexists命令

用于查看哈希表的指定字段是否存在。

如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0 。

hset k1 fd1 fdv1 fd2 fdv2 fd3 fdv3 #添加数据

hgetall k1 # 查询数据

hexists k1 fd4 # 不存在返回0
hexists k1 fd1 # 存在返回 1

6. Hincrby命令

Hincrby 命令用于为哈希表中的字段值加上指定增量值。

增量也可以为负数,相当于对指定字段进行减法操作。

如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。

如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。

对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。

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

hset k1 f1 20 # 添加一个key
hincrby k1 f1 1 # 给k1哈希表中的f1的值增加1
# 若不是数字类型,那么将报错

7. Hlen命令

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

hset k1 f1 v1 f2 v2
hlen k1 #返回 2 对应的k1哈希表中有两个字段分别是f1 f2,不存在返回0

8. Hdel命令

Hdel 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。

hset k1 f1 v1 f2 v2 #添加初始数据
hdel k1 f2 # 删除k1哈希表中的f2字段 返回 1成功
hget k1 f1 # 返回v1
hget k1 f2 # 返回 nil
hdel k1 f3 #返回 0删除失败

9.Hvals命令

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

hset k1 f1 v1 f2 v2
hvals k1 # 返回 v1 v2

10. Hincrbyfloat命令

Hincrbyfloat 命令用于为哈希表中的字段值加上指定浮点数增量值。

如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。

hset k1 f1 20.1
hincrbyfloat k1 f1 1.1 # 返回 21.2

11. Hkeys命令

Hkeys 命令用于获取哈希表中的所有字段名。

hset k1 f1 v1 f2 v2
hkeys k1 # 返回 f1 f2

12. Hsetnx 命令

Hsetnx 命令用于为哈希表中不存在的的字段赋值 。

如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。

如果字段已经存在于哈希表中,操作无效。

如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。

hsetnx k1 f1 v1
hsetnx k1 f1 v2 # 操作无效,已经存在忽略
hget k1 f1 # 值是 v1

10. 其他命令

其他命令可以进入官网进行自测

官网:Redis命令中心(Redis commands) -- Redis中国用户组(CRUG)

更多Redis资料:Redis 教程 | 菜鸟教程 (runoob.com)

Redis基础入门

Redis基础入门

0.为什么Redis是单线程还这么快?

redis 是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程 (CPU上下文会切换:耗时的操作!!!),对于内存系统来说,如果没有上下文切换效率就是最高 的!多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案!

1. Redis介绍

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings)散列(hashes)列表(lists)集合(sets)有序集合(sorted sets) 与范围查询, bitmapshyperloglogs地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication)LUA脚本(Lua scripting)LRU驱动事件(LRU eviction)事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

2. 关系型数据库和非关系型数据库

  • 关系型数据库(RDBMS):表格 ,行 ,列
泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代!尤其
是超大规模的高并发的社区!
暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的,而
且是我们当下必须要掌握的一个技术!
很多的数据类型用户的个人信息,社交网络,地理位置。这些数据类型的存储不需要一个固定的格式!
不需要多余的操作就可以横向扩展的 ! Map<String,Object> 使用键值对来控制
  • 非关系型数据库(NOSQL)
NOSQL:不仅仅是SQL
- 不仅仅是数据
- 没有固定的查询语言
- 键值对存储,列存储,文档存储,图形数据库(社交关系)
- 最终一致性,
- CAP定理和BASE (异地多活) 初级架构师!

1. redis能做什么

  1. 内存存储、持久化,内存中是断电即失、所以说持久化很重要(rdb、aof)
  2. 效率高,可以用于高速缓存
  3. 发布订阅系统
  4. 地图信息分析
  5. 计时器、计数器(浏览量!)

2. redis特点

  1. 特性
  2. 多样的数据类型
  3. 持久化
  4. 集群
  5. 事务

3. Redis安装Linux

中文官网:CRUG网站 (redis.cn)

英文官网:Redis

在官网中下载Redis的最新稳定版本即可,Redis是建议安装的,Linux可以下载.gz压缩文件,将压缩包解压到Linux服务器即可安装成功(我们可以解压到linux服务器中的/opt/目录中)

142

4. 基本环境安装

  1. 下载C++环境
yum install gcc-c++
make
make install
  • 注意
  • 安装 redis执行make命令报错struct redisServer’没有名为‘sentinel_mode’的成员

报错如图:

143

1.解决安装 redis执行make命令报错struct redisServer’没有名为‘sentinel_mode’的成员

  1. 查看gcc的版本是否在 5.3以上 命令:gcc -v
  2. \#升级到 5.3及以上版本命令:

    1. yum -y install centos-release-scl
    2. yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
    3. scl enable devtoolset-9 bash
执行完毕之后去到src目录下执行make即可编译成功

5. 启动Redis

目前我使用的Linux centos 7 和Redis 6.X

1.普通方式启动Redis

  1. 使用 cd 命令进入Redis的安装目录,如:cd /opt/redis/src/
  2. 查询目录下是否拥有 redis.server 如果有直接执行命令:./redis.server 若没有可以去目录 ·/usr/local/bin查找,然后执行./redis.server
  3. 见到如图就是启动成功了

144

我们会发现无法使用命令进行操作,这是因为redis的启动占用了当前线程,紧接着介绍第二种启动方式,也就是后台启动,是最常用的启动方式

2. 后台线程方式启动Redis

  1. 进入redis安装目录寻找配置后台启动配置文件redis.conf
  2. 使用vi redis.conf命令编辑配置文件
  3. 可以使用/ 命令查找对应的配置字母,修改如下配置值为yes

145

  1. 使用命令wq 保存退出
  2. 然后使用在安装目录使用命令./src/redis-server redis.conf (每个人的路径可能不一样,大概意思就是在启动方式1的基础上加上了配置文件的也叫配置文件启动方式)
  3. 查询是否启动成功ps -ef | grep redis 找到redis的进程即是启动成功

3. 关闭服务

在可以直接使用Linux命令将线程kill掉,也可以在客户端工具中执行shutdown命令

6. Redis客户端工具

客户端工具的目录在Redis的安装目录中的/src/目录下,名称叫做redis.cli

  • 启动命令
./redis.cli
当输入命令更改为:127.0.0.1:6379> 即为进入客户端工具成功
  • 退出

可以使用ctrl+c直接强制退出

可以命令ping 查看是否可以正常执行,返回PONG即表示成功

7. Redis基础命令

1. Redis的默认数据库

  • redis默认有16个数据库,默认使用的是第0个数据库,可以使用select n 进行切换数据库
select 3 # 切换数据库到第三个
DBSIZE # 查看数据库的大小

2. 清空Redis数据库

  • 清空当前数据库:flushdb
  • 清空全部数据库的内容:flushall

3. 查看所有的key

keys * # 查看所有的数据库

8. Redis String(字符串)命令

1. Setnx命令

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

语法:

setnx <k> <v> # 如 key 为 name v 为 张三
setnx <k> <v> # 在第二次添加时,key为name时,不论值为什么都会添加失败

2. getRange命令截取

getRange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。

语法:

# 设置一个k v数据
SET mykey "This is my test key"
getrange mykey 0 3
# 输出 "This"
getrange mykey 0 -1
# 输出 "This is my test key"

3. Mset命令

Mset 命令用于同时设置一个或多个 key-value 对。

# 设置多个k v键值对
mset k1 "Hello" k2 "World"

4. Setex命令

Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, Setex 命令将会替换旧的值。

setex k1 60 "v1"
# 设置 60秒过期的k1 值为 v1

5.set命令

SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。

# 设置一个键值对 k1 v1
set k1 v1

6. get命令

返回对应 key 的value值,如果 key 不存在时,返回 nil。 如果 key 不是字符串类型,那么返回一个错误

GET db # 不存在返回 nil

7. getBit命令

Getbit 命令用于对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

# 对不存在的 key 或者不存在的 offset 进行 GETBIT, 返回 0
 
redis> EXISTS bit
(integer) 0
 
redis> GETBIT bit 10086
(integer) 0
 
 
# 对已存在的 offset 进行 GETBIT
 
redis> SETBIT bit 10086 1
(integer) 0
 
redis> GETBIT bit 10086
(integer) 1

8. setBit命令

Setbit 命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

setbit bit 10086 1
getbit bit 10086

9.Decr命令

Decr 命令将 key 中储存的数字值减一。

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

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

set k1 10

decr k1 # 返回 9
# 对不存在的key值进行decr

decr k2 # 不存在赋值初始为0 再减一所以返回 -1

set k3 "hello"

decr k3 # 存在但不是数值的key会返回一个错误

10. decrBy命令

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

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

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

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

set k1 100

decrby k1 20 # K1 减去20 返回 80
# 其余的特点和decr一样

11. Strlen命令

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

set k1 "hello word"

strlen k1 # 返回k1的字符串长度 11

# 若k不存在返回 0

12. Msetnx命令

Msetnx 命令用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对。

当所有 key 都成功设置,返回 1 。 如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0

# 对不存在的 key 进行 MSETNX
 
MSETNX rmdbs "MySQL" nosql "MongoDB" key-value-store "redis" # 添加多个k v键值对
 
MGET rmdbs nosql key-value-store # 查询多个k v 键值对
1) "MySQL"
2) "MongoDB"
3) "redis"
 
 
# MSET 的给定 key 当中有已存在的 key
 
Msetnx rmdbs "Sqlite" language "python"  # rmdbs 键已经存在,操作失败

# 因为 MSET 是原子性操作,language 没有被设置
 
GET rmdbs     # rmdbs 也没有被修改 输出 MySQL

13. ncrby命令

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

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

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

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

# key 存在且是数字值
 
SET rank 50 # 添加一个k

INCRBY rank 20 # rank存在添加20 返回70

# key 不存在时

INCRBY counter 30 # 不存在,初始化0返回30
 
# key 不是数字值时
SET book "long long ago..."
INCRBY book 200 # book 值不是数字,报错

14. Incrbyfloat命令

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

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

# 值和增量都不是指数符号
SET mykey 10.50 # 设置myke 值为10.50
 
incrbyfloat mykey 0.1 # mykey的值增加0.1
 
# 值和增量都是指数符号
 
SET mykey 314e-2 # 设置mykey值为 314e-2

GET mykey  # 用 SET 设置的值可以是指数符号"314e-2"
 
incrybyfloat mykey 0      # 但执行 INCRBYFLOAT 之后格式会被改成非指数符号
"3.14"
 
# 可以对整数类型执行
 
SET mykey 3

INCRBYFLOAT mykey 1.1 # 对整数类型数据增加1.1
# 后跟的 0 会被移除
SET mykey 3.0
GET mykey                                   # SET 设置的值小数部分可以是 0 显示 "3.0"
 
INCRBYFLOAT mykey 1.000000000000000000000    # 但 INCRBYFLOAT 会将无用的 0 忽略掉,有需要的话,将浮点变为整数
GET mykey 返回 "4"

15.Setrange命令

Setrange 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。

set k1 "hello" #设置k1 的值为 hello 
setrange k1 1 "333" # 将k1 从索引2开始替换三个位数的字符,会替换掉ell 会返回h333o

16. psetex命令

Psetex 命令以毫秒为单位设置 key 的生存时间。

psetex的使用方法和setex的使用方法一样,只不过设置的过期时间是以毫秒为单位

17. Append 命令

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

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

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

append k1 "test" # 当k1不存在的时候会创建k1 值为 test等同于 set k1 "test"

set k2 "demo"
appent k2 "add" # 当k2存在的时候,会将字符添加到原来的值后面,会返回字符长度

18. getSet命令

Getset 命令用于设置指定 key 的值,并返回 key 旧的值。

set name "hello" # 设置一个初始k
getset name "word" # 会返回显示hello,然后将name的值设置为word
get name #这个时候name的值是word

19. Mget

Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil

set k1 "v1" # 添加
set k2 "v2" # 添加
mget k1 k2 k3 # 获取多个 不存在返回 nil

1) "v1"
2) "v2"
3) (nil)

20. Incr命令

Incr 命令将 key 中储存的数字值增一。

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

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

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

set k1 20 
incr k1  # k1 加一
get k1 # 返回21

9.Redis 哈希(Hash)命令

1.Hmset命令和Hset命令

Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。

此命令会覆盖哈希表中已存在的字段。

如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作

hset k1 f1 "k1-vf1" f2 "k1-vf2"  # hmset和hset使用方式一样,不过hmset在官方文档中说已经弃用
hget k1 f1 # hget

2. Hmget命令

Hmget 命令用于返回哈希表中,一个或多个给定字段的值。

如果指定的字段不存在于哈希表,那么返回一个 nil 值。

hset k1 f1 "k1-vf1" f2 "k1-vf2"
hmget k1 f1 f2 # hmget可以通过多个fild 获取到值

3. Hgetall命令

命令用于返回哈希表中,所有的字段和值。

在返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍。

hset k1 fd1 fdv1 fd2 fdv2 fd3 fdv3 #添加数据

hgetall k1 # 查询数据

# 输出结果 前面是fdkey 后面跟着他的fdvalue
1) "fd1"
2) "fdv1"
3) "fd2"
4) "fdv2"
5) "fd3"
6) "fdv3"

4. Hget命令

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

# 字段存在
HSET site redis redis.com

HGET site redis # 输出结果"redis.com" 不存在返回nil

5. Hexists命令

用于查看哈希表的指定字段是否存在。

如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0 。

hset k1 fd1 fdv1 fd2 fdv2 fd3 fdv3 #添加数据

hgetall k1 # 查询数据

hexists k1 fd4 # 不存在返回0
hexists k1 fd1 # 存在返回 1

6. Hincrby命令

Hincrby 命令用于为哈希表中的字段值加上指定增量值。

增量也可以为负数,相当于对指定字段进行减法操作。

如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。

如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。

对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。

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

hset k1 f1 20 # 添加一个key
hincrby k1 f1 1 # 给k1哈希表中的f1的值增加1
# 若不是数字类型,那么将报错

7. Hlen命令

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

hset k1 f1 v1 f2 v2
hlen k1 #返回 2 对应的k1哈希表中有两个字段分别是f1 f2,不存在返回0

8. Hdel命令

Hdel 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。

hset k1 f1 v1 f2 v2 #添加初始数据
hdel k1 f2 # 删除k1哈希表中的f2字段 返回 1成功
hget k1 f1 # 返回v1
hget k1 f2 # 返回 nil
hdel k1 f3 #返回 0删除失败

9.Hvals命令

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

hset k1 f1 v1 f2 v2
hvals k1 # 返回 v1 v2

10. Hincrbyfloat命令

Hincrbyfloat 命令用于为哈希表中的字段值加上指定浮点数增量值。

如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。

hset k1 f1 20.1
hincrbyfloat k1 f1 1.1 # 返回 21.2

11. Hkeys命令

Hkeys 命令用于获取哈希表中的所有字段名。

hset k1 f1 v1 f2 v2
hkeys k1 # 返回 f1 f2

12. Hsetnx 命令

Hsetnx 命令用于为哈希表中不存在的的字段赋值 。

如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。

如果字段已经存在于哈希表中,操作无效。

如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。

hsetnx k1 f1 v1
hsetnx k1 f1 v2 # 操作无效,已经存在忽略
hget k1 f1 # 值是 v1

10. 其他命令

其他命令可以进入官网进行自测

官网:Redis命令中心(Redis commands) -- Redis中国用户组(CRUG)

更多Redis资料:Redis 教程 | 菜鸟教程 (runoob.com)

版权属于:都依凡 所有,采用《知识共享署名许可协议》进行许可,转载请注明文章来源。

本文链接: http://blog.anlucky.cn/index.php/programming/database/147

赞 (3)

评论区(暂无评论)

啊哦,评论功能已关闭~