Redis数据库的基本命令

Redis数据库

Redis默认支持16个数据库,对外都是以一个从0开始的递增数字命名,可以通过参数databases来修改默认数据库个数。客户端连接Redis服务后会自动选择0号数据库,可以通过SELECT命令更换数据库,例如选择1号数据库:

Redis> SELECT 1
OK
Redis [1]> GET test
(nil)

Redis的多个数据库之间不是完全隔离的,FLUSHALL命令会清空所有数据库的数据。多数据库不适用存储不同应用的数据。

1.Redis基本命令

  • EXIT

    退出客户端

  • KEYS

    获取符合规则的建名列表。

    语法:KEYS pattern

    示例:KEYS * (查询所有的键)

    在这里插入图片描述

  • EXISTS

    判断一个键是否存在,若错在返回实数整数1,否则返回00.

    语法:EXISTS key

  • DEL

    删除键。

    可以删除一个或多个键,返回值是删除的键的个数。

    语法:DEL key [key ...]

  • TYPE

    获得键值的数据类型。

    返回值可能是string(字符串)、hash(散列类型)、list(列表类型)、set(集合类型)、zset(有序集合类型)。

    语法:TYPE key

2. 五种数据类型

redis有五种数据类型。分别是: String(字符串)、Hash(字典)、List(列表)、Set(集合)、Sorted Set(有序集合)

1. string(字符串类型)

字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。可以存储JSON化的对象、字节数组等。一个字符串类型键允许存储的数据最大容量是512MB。

赋值与取值:

SET key value

GET key

递增数字:

INCR key

当存储的字符串是整数时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。如果 key 不存在,那么 key 的值会先被初始化为 0,然后执行INCR操作(相当于直接为1)。

增加指定的的整数:

INCRBY key increment

同理可知减少数字

DECR key

DECRBY key decrement

向尾部追加值

APPEND key value

APPEND的作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于 SET key value。返回值是追加后字符串的总长度。

获取字符串长度

STRLEN key

STRLEN命令返回键值的长度,如果键不存在则返回0。

同时设置/获取多个键值

MSET key value [key value …]

MGET key [key …]

2. hash(字典,散列)

散列类型存储了字段(field)和字段值的映射,但是字段值只能是字符串,不能是其他类型,也就是说散列类型不能嵌套其他的数据类型。一个散列类型可以包含最多 2 32 − 1 2^{32}-1 2321个字段。

赋值与取值

HSET key field value

HGET key field

HMSET key field value [field value …]

HMGET key field [field …]

HGETALL key

判断字段是否存在

HEXISTS key field

增加数字

HINCRBY key field increment (increment不填即为1)

删除字段,可以删除一个或多个字段,返回值是被删除的字段个数

HDEL key field [field …]

只获取字段名或字段值

HKEYS key

HVALS key

获取字段数量

HLEN key

3. List(列表类型)

列表类型(List)可以存储一个有序地字符串列表,常用操作是向列表两端添加元素,或者获得列表的某一片段。

列表内部时使用双向链表实现,所有向列表两端添加元素的时间复杂度几乎为0,获取越接近两端的元素速度越快。

与Hash数据类型一样,一个列表类型键最多能容纳 2 32 − 1 2^{32}-1 2321个元素。

向列表两端增加元素

LPUSH key value [value …]

RPUSH key value [value …]

从列表两端弹出元素

LPOP key

RPOP key

POP命令会分两步完成,第一步是将列表元素从列表中移除,第二步是返回被移除的元素值。

获取列表中元素的个数

LLEN key

获取列表片段

LRANGE key start stop

LRANGE命令是列表类型最常用的命令之一,获取列表中的某一片段,将返回start、stop之间的所有元素(包含西端的元素)索引从0开始。索引可以是负数,如:“-1”代表最后边的一个元素。

删除列表中指定的值

LREM key count value

LREM命令会删除列表中前count个值为value的元素,返回实际删除的元素个数。根据count值的不同,该命令的执行方式会有所不同:

  • l当count>0时, LREM会从列表左边开始删除。

  • l当count<0时, LREM会从列表后边开始删除。

  • l当count=0时, LREM删除所有值为value的元素。

获得/设置指定索引的元素值

LINDEX key index

LSET key index value

只保留列表指定片段,指定范围和LRANGE一致

LTRIM key start stop

向列表中插入元素

LINSERT key BEFORE|AFTER pivot value

该命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。

将某列表最后一个元素从转移到另一个列表第一个

RPOPLPUSH source destination

4. Set(集合)

集合和列表的对比

集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型的Redis内部是使用值为空的散列表实现,所有这些操作的时间复杂度都为0(1)。

Redis还提供了多个集合之间的交集、并集、差集的运算。

增加/删除元素

SADD key member [member …]

SREM key member [member …]

获得集合中的所有元素

SMEMBERS key

判断元素是否在集合中,无论集合中有多少元素都可以极速的返回结果。

SISMEMBER key member

集合的差集运算

SDIFF key [key …]

集合的交集运算

SINTER key [key …]

集合的并集运算

SUNION key [key …]

获得集合中元素的个数

SCARD key

从集合中弹出一个元素

SPOP key

由于集合是无序的,所有SPOP命令会从集合中随机选择一个元素弹出

5. SortedSet(有序集合)

在集合类型的基础上有序集合类型为集合中的每个元素都关联一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在在集合中,还能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。

在某些方面有序集合和列表类型有些相似。

1、二者都是有序的。

2、二者都可以获得某一范围的元素。

但是,二者有着很大区别:

1、列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会变慢。

2、有序集合类型使用散列表实现,所有即使读取位于中间部分的数据也很快。

3、列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改分数实现)

4、有序集合要比列表类型更耗内存。

增加元素

ZADD key score member [score member …]

向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是加入到集合中的元素个数,不包含之前已经存在的元素。

获取元素的分数

ZSCORE key member

获得排名在某个范围的元素列表(包含两端的元素)

ZRANGE key start stop [WITHSCORES] 按照分数从小到大(后面加上WITHSCORES可获得元素分数)

ZREVRANGE key start stop [WITHSCORES] 按照分数从大到小

获得指定分数范围的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

offset表示结果起始位置,count表示结果数量

增加某个元素的分数,返回值是更改后的分数

ZINCRBY key increment member

获得集合中元素的数量

ZCARD key

获得指定分数范围内的元素个数

ZCOUNT key min max

按照排名范围删除元素

ZREMRANGEBYRANK key start stop

按照分数范围删除元素

ZREMRANGEBYSCORE key min max

获取元素排名

ZRANK key member 从小到大

ZREVRANK key member 从大到小

3. Redis生存时间

Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁。

  • 设置生存时间

    EXPIRE key seconds

    PEXPIRE key milliseconds(生存时间设置毫秒单位)

  • 查询生存时间

    TTL key

  • 清除生存时间

    PERSIST key

4.Redis配置文件常用配置

port — 服务端口

bind — 绑定ip其他ip不能访问(多个ip空格隔开)

databases – 数据库数量,默认16个

daemonize – 设置为守护进程(Linux平台)

maxmemory – 最大的内存大小(1MB、1GB、1m、1g)

maxmemory-policy — 达到内存限制后的处理策略

规则说明
volatile-lru使用LRU算法删除一个键(只对设置了生存时间的键)
allkeys-lru使用LRU算法删除一个键
volatile-random随机删除一个键(只对设置了生存时间的键)
allkeys-random随机删除一个键
volatile-ttl删除生存时间最近的一个键
noeviction不删除键,只返回错误

5. Redis的持久化

Redis的强大功能很大程度上是由于其将所有数据都存储在内存中,为了使Redis在重启后仍能保证数据不丢失,需要将数据从内存中以某种形式持久化到硬盘中。

Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将两种结合使用。

1. RDB

RDB方式是通过快照完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照并且存储到硬盘上。进行快照的条件在配置文件中指定,有2个参数构成:时间和改动的键的个数,当在指定时间内被更改的键的个数大于指定数值时就会进行快照。

RDB是Redis的默认持久化方式。

可通过SAVE命令进行手动备份。


在配置文件中已经预置了3个条件:

save 900 1 #15分钟内有至少1个键被更改则进行快照

save 300 10 #5分钟内至少有10个键被更改则进行快照

save 60 10000 #1分钟内至少有10000个键被更改则进行快照

以上条件之间是“或”的关系。

默认的rdb的文件路径是在当前目录,文件名是:dump.rdb,可以在配置文件中修改路径和文件名,分别是dir和dbfilename。

Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存,一般情况下1GB的快照文件载入到内存的时间约为20~30秒钟。(不同服务器会有差异)。


RDB的快照过程如下:

1.Redis使用fork函数复制一份当前进程(父进程)的副本(子进程);

2.父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入到硬盘中的临时文件;

3.当子进程写入完所有数据后会用该临时文件替换旧的RDB文件。

RDB文件是通过压缩的,可以通过配置rdbcompression参数来禁用压缩。

2. AOF

Redis的AOF持久化策略是将发送到Redis服务端的每一条命令都记录下来,并且保存到硬盘中的AOF文件,AOF文件的位置和RDB文件的位置相同,都是通过dir参数设置,默认的文件名是appendonly.aof,可以通过appendfilename参数修改。


可以使用BGREWRITEAOF命令来重写AOF文件。

重写策略的参数设置:

auto-aof-rewrite-percentage 100

当前的AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF文件大小为依据。

auto-aof-rewrite-min-size 64mb

限制了允许重写的最小AOF文件大小,通常在AOF文件很小的时候即使其中有些冗余的命令也是可以忽略的。


文件写入默认情况下会先写入到系统的缓存中,系统每30秒同步一次,才是真正的写入到硬盘,如果在这30秒服务器宕机那数据也会丢失的,Redis可以通过配置来修改同步策略:

# appendfsync always 每次都同步 (最安全但是最慢)

# appendfsync everysec 每秒同步 (默认的同步策略)

# appendfsync no 不主动同步,由操作系统来决定 (最快但是不安全)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值