1、安装redis
# 参考网址
https://www.cnblogs.com/hunanzp/p/12304622.html
# 下载redis安装包
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
# 解压并安装redis
tar -zxvf redis-5.0.7.tar.gz
# 移动redis目录
mv /root/redis-5.0.7 /usr/local/redis
# 编译
cd /usr/local/redis
make
# 安装
make PREFIX=/usr/local/redis install
这里多了一个关键字 PREFIX= 这个关键字的作用是编译的时候用于指定程序存放的路径。比如我们现在就是指定了redis必须存放在/usr/local/redis目录。假设不添加该关键字Linux会将可执行文件存放在/usr/local/bin目录,
库文件会存放在/usr/local/lib目录。配置文件会存放在/usr/local/etc目录。其他的资源文件会存放在usr/local/share目录。这里指定号目录也方便后续的卸载,后续直接rm -rf /usr/local/redis 即可删除redis。
# 配置redis.conf
cd /usr/local/redis
vim redis.conf
daemonize yes # 开启后台模式
port 6379 # 指定监听的端口
bind 127.0.0.1 # 如果需要远程登录,将这里注释掉
protected-mode yes|no # 保护模式,如果需要远程登录,将其设置为no
databases 16 # 指定数据库的数量
requirepass xxx # 指定登录密码
maxclients 0 # 最大连接数,设置为0表示不做限制
# 启动redis
cd /usr/local/redis
./bin/redis-server ./redis.conf
# 查看是否开启
netstat -tunlp | grep 6379
ps -aux | grep redis
# 配置redis-cli
如果redis-cli没有命令
ln -s /usr/local/redis/bin/redis-cli /usr/local/bin/redis-cli
2、常用命令
# 查看redis的版本
redis-cli -v
# 登录
redis-cli -h xxx.xxx.xxx.xxx -p 6379 -a xxx
# 查看key的总数
info keyspace
# 查询key
keys *
# 查看所有的配置
config get *
# 设置过期时间
expire xxx 100
# 查看过期时间
ttl xxx
# 查看redis的版本
redis-cli -v
#登录
redis-cli -a password (前提:切换到对应用户上)
redis-cli -h <主机名或IP地址> -p <端口号> -a <密码>
3、面试题
3.1 什么是redis,优缺点?
redis本质上是一个key-value类型的内存数据库,很像Memcached,将整个数据保存在内存中操作,并定期通过异步操作将数据库的数据flush到磁盘中。
因为是纯内存操作,redis的性能非常出色,每秒可以处理超过10万次读写操作,
优点:
-
读写性能高,读:10万次/s 写:8.1万次/s
-
支持数据持久化 AOF 和 RDB两种方式
-
支持事务,redis的所有操作都是原子性的
-
单个操作是原子性
-
多个操作通过multi和exec两个指令包起来
127.0.0.1:6379> multi OK 127.0.0.1:6379> set name xiaoming QUEUED 127.0.0.1:6379> set age 18 QUEUED 127.0.0.1:6379> set gender sex QUEUED 127.0.0.1:6379> exec 1) OK 2) OK 3) OK 127.0.0.1:6379>
-
-
数据结构丰富,string,hash,set,zset,list类型
-
支持主从复制,主机会自动将数据同步到从机,可以进行读写分离
-
丰富的特性,redis还支持publish/subscribe,通知,key过期等特性
缺点:
- 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
- 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
3.2 redis为什么这么快?
- 内存存储:使用内存存储,没有IO开销。数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度都是O(1)。
- 单线程实现:(redis6.0以前),避免多个线程之间线程切换和锁资源争用的开销
- 非阻塞IO:使用多路复用IO技术。将epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间。
- 优化的数据结构:Redis有诸多可以直接应用的优化数据结构的实现,应用层可以直接使用原生的数据结构提升性能。
- 使用的底层模型