①默认启动
[root@rich ~]# /usr/local/redis/bin/redis-server
7239:C 07 Oct 18:59:12.144 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7239:C 07 Oct 18:59:12.144 # Redis version=4.0.2, bits=64, commit=00000000, modified=0, pid=7239, just started
7239:C 07 Oct 18:59:12.144 # Warning: no config file specified, using the default config. In order to specify a config file use /usr/local/redis/bin/redis-server /path/to/redis.conf
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…
②定制配置项启动
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
格式
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五种常用数据结构
===============
KEY | VALUE |
string | |
list | |
set | |
hash | |
zset |
Redis中的数据,总体上是键值对,不同数据类型指的是键值对中值的类型。
Redis中最基本的类型,它是key对应的一个单一值。二进制安全,不必担心由于编码等问题导致二进制数据变化。所以redis的string可以包含任何数据,比如jpg图片或者序列化的对象。Redis中一个字符串值的最大容量是512M。
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。说明它的底层是基于链表实现的,所以它操作时头尾效率高,中间效率低。
2.set类型
Redis的set是string类型的无序集合。它是基于哈希表实现的。
本身就是一个键值对集合。可以当做Java中的Map<String,Object>对待。
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
========================================================================
①切换数据库
``` 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采用持久化机制来增强数据安全性。
①机制描述
每隔一定的时间把内存中的数据作为一个快照保存到硬盘上的文件中。Redis默认开启RDB机制。
②触发时机
``` properties
save 900 1
save 300 10
save 60 10000
```
含义
| 配置 | 含义 |
| — | — |
| save 900 1 | 900秒内至少有一次修改则触发保存操作 |
| save 300 10 | 300秒内至少有10次修改则触发保存操作 |
| save 60 10000 | 60秒内至少有1万次修改则触发保存操作 |
save或bgsave
这个命令也会产生dump.rdb文件,但里面是空的,没有意义
如果执行SHUTDOWN命令让Redis正常退出,那么此前Redis就会执行一次持久化保存。
③相关配置
| 配置项 | 取值 | 作用 |
| — | — | — |
| save | “” | 禁用RDB机制 |
| dbfilename | 文件名,例如:dump.rdb | 设置RDB机制下,数据存储文件的文件名 |
| dir | Redis工作目录路径 | 指定存放持久化文件的目录的路径。注意:这里指定的必须是目录不能是文件名 |
④思考
RDB机制能够保证数据的绝对安全吗?
①机制描述
根据配置文件中指定的策略,把生成数据的命令保存到硬盘上的文件中。一个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重写
对比下面两组命令:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
总结
这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!
某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!
成功只会留给那些有准备的人!
,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-DqkCy5ph-1711717844385)]
[外链图片转存中…(img-u6ie1Lcv-1711717844386)]
[外链图片转存中…(img-mnBL6ufg-1711717844386)]
[外链图片转存中…(img-NbPdmUwY-1711717844387)]
[外链图片转存中…(img-w3ahgK5b-1711717844387)]
[外链图片转存中…(img-25134fNN-1711717844388)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-3dTNPnfe-1711717844388)]
总结
这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!
某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!
成功只会留给那些有准备的人!
[外链图片转存中…(img-QBft76RD-1711717844388)]