Redis数据结构存储系统:第一章:安装配置,成为阿里P7Java架构师到底有多难

7239:M 07 Oct 18:59:12.145 * Increased maximum number of open files to 10032 (it was originally set to 1024).

_._

_.-``__ ‘’-._

_.-``    `.  `_.  ‘’-._           Redis 4.0.2 (00000000/0) 64 bit

.-`` .-```.  ```\/    _.,_ ‘’-._

(    ’      ,       .-`  | `,    )     Running in standalone mode

|`-._`-…-` __…-.``-._|‘` _.-’|     Port: 6379

|    `-._   `._    /     _.-’    |     PID: 7239

`-._    `-._  `-./  _.-’    _.-’

|`-._`-._    `-.__.-’    _.-‘_.-’|

|    `-._`-._        _.-‘_.-’    |           http://redis.io

`-._    `-._`-.__.-‘_.-’    _.-’

|`-._`-._    `-.__.-’    _.-‘_.-’|

|    `-._`-._        _.-‘_.-’    |

`-._    `-._`-.__.-‘_.-’    _.-’

`-._    `-.__.-’    _.-’

`-._        _.-’

`-.__.-’

7239:M 07 Oct 18:59:12.148 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

7239:M 07 Oct 18:59:12.148 # Server initialized

7239:M 07 Oct 18:59:12.148 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.

7239:M 07 Oct 18:59:12.148 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command ‘echo never > /sys/kernel/mm/transparent_hugepage/enabled’ as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

7239:M 07 Oct 18:59:12.148 * Ready to accept connections

停止Redis服务器

/usr/local/redis/bin/redis-cli shutdown

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

7239:M 07 Oct 19:00:53.208 # User requested shutdown…

7239:M 07 Oct 19:00:53.208 * Saving the final RDB snapshot before exiting.

7239:M 07 Oct 19:00:53.214 * DB saved on disk

7239:M 07 Oct 19:00:53.214 # Redis is now ready to exit, bye bye…

②定制配置项启动

[1]准备配置文件

cp /opt/redis-4.0.2/redis.conf /usr/local/redis/

[2]修改配置项 vim /usr/local/redis/redis.conf

注意:/var/logs目录需要我们提前创建好 mkdir -p /var/logs/redis.log

| 配置项名称 | 作用 | 取值 |

| — | — | — |

| daemonize | 控制是否以守护进程形式运行Redis服务器 | no |

| logfile | 指定日志文件位置 | “/var/logs/redis.log” |

| dir | Redis工作目录 | /usr/local/redis |

bind                          绑定的ip地址端口号192.168.0.100                                                   192.168.0.100

[3]让Redis根据指定的配置文件启动

格式

redis-server文件路径 redis.conf文件路径

举例

/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf

关于Jedis连接Linux上的redis出现 DENIED Redis is running in protected mode问题的解决方案:一般不用设置密码

==============================================================================================================================================

6.客户端登录


/usr/local/redis/bin/redis-cli

127.0.0.1:6379>

ping

PONG

127.0.0.1:6379> exit

另一种:

cd /usr/local/redis/bin

./redis-cli -h 192.168.0.100 -p 6379

192.168.0.100:6379> ping

PONG

四、Redis五种常用数据结构

===============

1.总体结构


KEYVALUE
string
list
set
hash
zset

Redis中的数据,总体上是键值对,不同数据类型指的是键值对中值的类型。

2.string类型


Redis中最基本的类型,它是key对应的一个单一值。二进制安全,不必担心由于编码等问题导致二进制数据变化。所以redis的string可以包含任何数据,比如jpg图片或者序列化的对象。Redis中一个字符串值的最大容量是512M。

3.list类型


Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。说明它的底层是基于链表实现的,所以它操作时头尾效率高,中间效率低。

2.set类型


Redis的set是string类型的无序集合。它是基于哈希表实现的。

3.hash类型


本身就是一个键值对集合。可以当做Java中的Map<String,Object>对待。

4.zset类型


Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

五、Redis命令行操作

========================================================================

1.基本操作


①切换数据库

``` html

Redis默认有16个数据库。

115 # Set the number of databases. The default database is DB 0, you can select

116 # a different one on a per-connection basis using SELECT where

117 # dbid is a number between 0 and ‘databases’-1

118 databases 16

使用select进行切换,数据库索引从0开始

127.0.0.1:6379> select 2

OK

127.0.0.1:6379[2]> select 0

OK

127.0.0.1:6379>

```

②查看数据库长度

``` html

127.0.0.1:6379> dbsize

(integer) 3

```

2.KEY操作

``` html

●KEYS PATTERN

●TYPE KEY

返回KEY对应的值的类型

●MOVE KEY DB

把一组键值对数据移动到另一个数据库中

●DEL KEY [KEY …]

根据KEY进行删除,至少要指定一个KEY

●EXISTS KEY

检查指定的KEY是否存在。指定一个KEY时,存在返回1,不存在返回0。可以指定多个,返回存在的KEY的数量。

●RANDOMKEY

在现有的KEY中随机返回一个

●RENAME KEY NEWKEY

重命名一个KEY,NEWKEY不管是否是已经存在的都会执行,如果NEWKEY已经存在则会被覆盖。

●RENAMENX KEY NEWKEY

只有在NEWKEY不存在时能够执行成功,否则失败

●TIME

返回当前UNIX时间戳

●TTL KEY

以秒为单位查看KEY还能存在多长时间

●PTTL KEY

以毫秒为单位查看KEY还能存在多长时间

●EXPIRE KEY SECONDS

给一个KEY设置在SECONDS秒后过期,过期会被Redis移除。

●EXPIREAT KEY TIMESTAMP

设置一个KEY在TIMESTAMP指定的时间过期

●PEXPIRE KEY MILLISECONDS

以毫秒为单位指定过期时间

●PEXPIREAT KEY MILLISECONDS-TIMESTAMP

以毫秒为单位指定过期的时间戳

●PERSIST KEY

移除过期时间,变成永久key

```

2.string操作

``` html

●SET KEY VALUE [EX SECONDS] [PX MILLISECONDS] [NX|XX]

给KEY设置一个string类型的值。

EX参数用于设置存活的秒数。

PX参数用于设置存活的毫秒数。

NX参数表示当前命令中指定的KEY不存在才行。

XX参数表示当前命令中指定的KEY存在才行。

●GET KEY

根据key得到值,只能用于string类型。

●APPEND KEY VALUE

把指定的value追加到KEY对应的原来的值后面,返回值是追加后字符串长度

●STRLEN KEY

直接返回字符串长度

●INCR KEY

自增1

●DECR KEY

自减1

●INCRBY KEY INCREMENT

原值+INCREMENT

●DECRBY KEY DECREMENT

原值-DECREMENT

●GETRANGE KEY START END

从字符串中取指定的一段

●SETRANGE KEY OFFSET VALUE

从offset开始使用VALUE进行替换

●SETEX KEY SECONDS VALUE

设置KEY,VALUE时指定存在秒数

●SETNX KEY VALUE

新建字符串类型的键值对

●MSET KEY VALUE [KEY VALUE …]

一次性设置一组多个键值对

●MGET KEY [KEY …]

一次性指定多个KEY,返回它们对应的值,没有值的KEY返回值是(nil)

●MSETNX KEY VALUE [KEY VALUE …]

一次性新建多个值

●GETSET KEY VALUE

设置新值,同时能够将旧值返回

```

3.list操作

``` html

●LPUSH key value [value …]

●RPUSH key value [value …]

●LRANGE key start stop

根据list集合的索引打印元素数据

正着数:0,1,2,3,…

倒着数:-1,-2,-3,…

●LLEN key

●LPOP key

从左边弹出一个元素。

弹出=返回+删除。

●RPOP key

从右边弹出一个元素。

●RPOPLPUSH source destination

从source中RPOP一个元素,LPUSH到destination中

●LINDEX key index

根据索引从集合中取值

●LINSERT key BEFORE|AFTER pivot value

在pivot指定的值前面或后面插入value

●LPUSHX key value

只能针对存在的list执行LPUSH

●LREM key count value

根据count指定的数量从key对应的list中删除value

●LSET key index value

把指定索引位置的元素替换为另一个值

●LTRIM key start stop

仅保留指定区间的数据,两边的数据被删除

```

4.set操作

``` html

●SADD key member [member …]

●SMEMBERS key

●SCARD key

返回集合中元素的数量

●SISMEMBER key member

检查当前指定member是否是集合中的元素

●SREM key member [member …]

从集合中删除元素

●SINTER key [key …]

将指定的集合进行“交集”操作

集合A:a,b,c

集合B:b,c,d

交集:b,c

●SINTERSTORE destination key [key …]

取交集后存入destination

●SDIFF key [key …]

将指定的集合执行“差集”操作

集合A:a,b,c

集合B:b,c,d

A对B执行diff:a

相当于:A-交集部分

●SDIFFSTORE destination key [key …]

●SUNION key [key …]

将指定的集合执行“并集”操作

集合A:a,b,c

集合B:b,c,d

并集:a,b,c,d

●SUNIONSTORE destination key [key …]

●SMOVE source destination member

把member从source移动到destination

●SPOP key [count]

从集合中随机弹出count个数量的元素,count不指定就弹出1个

●SRANDMEMBER key [count]

从集合中随机返回count个数量的元素,count不指定就返回1个

●SSCAN key cursor [MATCH pattern] [COUNT count]

基于游标的遍历

```

5.hash操作

``` html

●HSET key field value

●HGETALL key

●HGET key field

●HLEN key

●HKEYS key

●HVALS key

●HEXISTS key field

●HDEL key field [field …]

●HINCRBY key field increment

●HMGET key field [field …]

●HMSET key field value [field value …]

●HSETNX key field value

●HSCAN key cursor [MATCH pattern] [COUNT count]

```

6.zset操作

``` html

●ZADD key [NX|XX] [CH] [INCR] score member [score member …]

●ZRANGE key start stop [WITHSCORES]

●ZCARD key

●ZCOUNT key min max

根据分数在min,max之间查找元素

●ZSCORE key member

●ZINCRBY key increment member

●ZLEXCOUNT key min max

●ZRANGEBYLEX key min max [LIMIT offset count]

按照字母顺序在区间内返回member

min和max使用“[a”表示闭区间,使用“(a”表示开区间

-表示负无穷

+表示正无穷

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

在分数的指定区间内返回数据

●ZRANK key member

先对分数进行升序排序,返回member的排名

●ZREM key member [member …]

●ZREMRANGEBYLEX key min max

●ZREMRANGEBYRANK key start stop

●ZREMRANGEBYSCORE key min max

●ZREVRANGE key start stop [WITHSCORES]

●ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

●ZREVRANK key member

●ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]

●ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

把指定集合的member取交集,分数会相加

●ZSCAN key cursor [MATCH pattern] [COUNT count]

```

六、Redis持久化机制

============

官网描述

Redis工作时数据都存储在内存中,万一服务器断电,则所有数据都会丢失。针对这种情况,Redis采用持久化机制来增强数据安全性。

1.RDB


①机制描述

每隔一定的时间把内存中的数据作为一个快照保存到硬盘上的文件中。Redis默认开启RDB机制。

②触发时机

[1]基于默认配置

``` properties

save 900 1

save 300 10

save 60 10000

```

含义

| 配置 | 含义 |

| — | — |

| save 900 1 | 900秒内至少有一次修改则触发保存操作 |

| save 300 10 | 300秒内至少有10次修改则触发保存操作 |

| save 60 10000 | 60秒内至少有1万次修改则触发保存操作 |

[2]使用保存命令

save或bgsave

[3]使用flushall命令

这个命令也会产生dump.rdb文件,但里面是空的,没有意义

[4]服务器关闭

如果执行SHUTDOWN命令让Redis正常退出,那么此前Redis就会执行一次持久化保存。

③相关配置

| 配置项 | 取值 | 作用 |

| — | — | — |

| save | “” | 禁用RDB机制 |

| dbfilename | 文件名,例如:dump.rdb | 设置RDB机制下,数据存储文件的文件名 |

| dir | Redis工作目录路径 | 指定存放持久化文件的目录的路径。注意:这里指定的必须是目录不能是文件名 |

④思考

RDB机制能够保证数据的绝对安全吗?

2.AOF


①机制描述

根据配置文件中指定的策略,把生成数据的命令保存到硬盘上的文件中。一个AOF文件的内容可以参照下面的例子:

``` properties

*2

$6

SELECT

$1

0

*3

$3

set

$3

num

$2

10

*2

$4

incr

$3

num

*2

$4

incr

$3

num

*2

$4

incr

$3

num

```

生成上面文件内容的Redis命令是:

``` html

set num 10

incr num

incr num

incr num

```

②AOF基本配置

| 配置项 | 取值 | 作用 |

| — | — | — |

| appendonly | yes | 启用AOF持久化机制 |

|   | no | 禁用AOF持久化机制[默认值] |

| appendfilename | “文件名” | AOF持久化文件名 |

| dir | Redis工作目录路径 | 指定存放持久化文件的目录的路径。注意:这里指定的必须是目录不能是文件名 |

| appendfsync | always | 每一次数据修改后都将执行文件写入操作,缓慢但是最安全。 |

|   | everysec | 每秒执行一次写入操作。折中。 |

|   | no | 由操作系统在适当的时候执行写入操作,最快。 |

③AOF重写

对比下面两组命令:

| AOF重写前 | AOF重写后 |

| — | — |

| set count 1

incr count

incr count

incr count | set count 4 |

两组命令执行后对于count来说最终的值是一致的,但是进行AOF重写后省略了中间过程,可以让AOF文件体积更小。而Redis会根据AOF文件的体积来决定是否进行AOF重写。参考的配置项如下:

| 配置项 | 含义 |

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后

毕竟工作也这么久了 ,除了途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节

美团面试经验

美团面试
字节面试经验
字节面试
菜鸟面试经验
菜鸟面试
蚂蚁金服面试经验
蚂蚁金服
唯品会面试经验
唯品会

因篇幅有限,图文无法详细发出

两组命令执行后对于count来说最终的值是一致的,但是进行AOF重写后省略了中间过程,可以让AOF文件体积更小。而Redis会根据AOF文件的体积来决定是否进行AOF重写。参考的配置项如下:

| 配置项 | 含义 |

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-Jww8VfIr-1711003974837)]
[外链图片转存中…(img-xHt7EjtH-1711003974838)]
[外链图片转存中…(img-d320hBfJ-1711003974839)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-m1CcoQIZ-1711003974839)]

最后

毕竟工作也这么久了 ,除了途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节

美团面试经验

[外链图片转存中…(img-qUoi3yBv-1711003974840)]
字节面试经验
[外链图片转存中…(img-Dz5uy4qH-1711003974840)]
菜鸟面试经验
[外链图片转存中…(img-a1rry5rx-1711003974840)]
蚂蚁金服面试经验
[外链图片转存中…(img-kQDG0ssq-1711003974841)]
唯品会面试经验
[外链图片转存中…(img-S60NW6eB-1711003974841)]

因篇幅有限,图文无法详细发出

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值