Linux版本Redis的安装

1.目标

  • 掌握Redis的安装

2.讲解

  1. 在Linux虚拟机中安装c++环境(C的编译运行环境)

yum -y install gcc-c++
  1. 下载Redis

  2. 上传到Linux

  3. 解压

# 创建目录/usr/local/redis
[root@shuaige ~]# mkdir /usr/local/redis
# 将redis解压到/usr/local/redis目录下
[root@shuaige ~]# tar -zxvf redis-4.0.14.tar.gz -C /usr/local/redis
  1. 编译

# 切换到redis解压目录
[root@shuaige ~]# cd /usr/local/redis/redis-4.0.14/
# 执行编译
[root@shuaige redis-4.0.14]# make
  1. 安装

[root@shuaige redis-4.0.14]# make install PREFIX=/usr/local/redis
  1. 进入安装好的redis目录,复制配置文件

# 进入bin目录
[root@shuaige redis-4.0.14]# cd /usr/local/redis/bin
# 将redis配置文件复制到bin目录下
[root@shuaige bin]# cp ../redis-4.0.14/redis.conf ./
  1. 修改配置文件

# 修改配置文件
[root@shuaige bin]# vi redis.conf
# Redis后台启动
修改 daemonize 为 yes
# 设置Redis服务器可以跨网络访问
修改 bind 为 0.0.0.0
  1. 开放端口号6379

# 1.开放端口号6379(端口号建议更改)
firewall-cmd --zone=public --add-port=6379/tcp --permanent
# 2.重启加载防火墙或者重启防火墙
service firewalld restart
  1. 启动redis

[root@shuaige bin]# ./redis-server redis.conf
  1. 客户端登录

[root@shuaige bin]# ./redis-cli [-h 主机地址 -p 端口号 -a 密码 ]
  1. redis设置密码

# 1.修改redis配置文件 搜索找到requirepass,
# 2.将注释#去掉,设置你自己的密码【eg:123456】
requirepass 123456
# 3.登录redis客户端操作时 需要使用密码连接
# 方式一:
[root@shuaige bin]# ./redis-cli -a 123456
# 方式二:
# 第一步:
[root@shuaige bin]# ./redis-cli
# 第二步:
127.0.0.1:6379> auth 123456
# 直接密码登录
auth 123456

Redis 5种常用数据类型

字符串(string):普通字符串,常用

哈希(hash):适合存储对象

列表(list):按照插入顺序排序,可以有重复元素

集合(set):无序集合,没有重复元素

有序集合(sorted set / zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素

更多命令可以参考Redis中文网:Redis中文网

reids分布式锁

执行脚本

lua脚本:为了保证操作的原子性

上锁保证的条件

1、互斥性:只能有一个客户端持有锁

2、无死锁:客户端上锁但宕机,要保证其它客户端可以上锁

3、唯一性:上锁+解锁的客户端是同一个客户端

上锁的实现方式

setnx命令

case1:唯一性

上锁:setnx key value

解锁:del key

case2.1:无死锁

设置有效期

case2.2:无死锁

开启锁续期,守护线程,只要不宕机,就一直有锁

case3:可重入

可重入锁意思是在外层使用锁后,内层仍然可以使用

判断可重复次数是否大于0,大于0则-1,否则删除键值,释放锁资源

case4:引入订阅机制

通过消息队列来释放,加锁或者解锁的操作信息

redis雪崩、穿透、击穿的原因和解决方案_雪崩解决方案

击穿:缓存没有,数据库有

穿透:缓存没有,数据库也没有

怎么区分Redis 缓存穿透、击穿、雪崩 - 知乎

redis持久化

RBD持久化

(redis data base)

save

特点:只有一个线程,会阻塞服务器接受请求

bgsave(background save)采用fork+copyonwrite

bgsave简易持久化流程

1、fork主进程获得子进程。子进程共享主进程的物理内存

2、将修改数据的页面进行copyonwrite,然后复制页表给子进程替换旧RBD,并写入磁盘

bgsave具体持久化流程

1、

AOF持久化

主从复制

数据同步原理

主从第一次同步,是全量同步

slave重启后同步,则是增量同步

如何判断是否是全量同步,通过利用replication_id

概念

Redis(remote dictionary server)远程字典服务,是一个基于内存的key-value结构数据库

spring-data对redis做了支持,使用spring-data-redis可以简化mongoDB的操作,封装了底层的jedis

应用场景

缓存、任务队列、消息队列、分布式锁

特点

1、可以达到10万+的QPS(query per second)每秒查询次数

2、非关系型数据库

其中

mysql:关系型数据库,mysql存储数据时使用表,表与表之间存在关系(外键)

nosql:非关系型数据库,存储数据时一般没有表的概念,直接进行数据存储 Redis:key-value

redis使用步骤

step1:引入依赖+配置文件

step2:autowired注入redistemplate

step3:调用API

step4:配置redis

redistemplate和

stringredistemplate

联系

1、stringredistemplate extends redistemplate

2、实现的序列化也都实现了redisserializer

区别

1、两者只能管理各自的数据

2、redistemplate使用的是jdkserializationreidsserializer,存入数据会将数据先序列化成字节数组,再存入到redis数据库

stringreidstemplate使用的是stringredisserializer

使用场景

1、redistemplate中存取数据都是字节数组。若存储的数据是可读但非字节数组时,不能使用

2、stringredistemplate

StringRedisTemplate操作redis数据 - 斑马森林 - 博客园

Redis命令

键值命令

ping

keys pattern

exists key

expire key 秒数

ttl key(time to live)

type key

del key

rename key newkey

测试连接是否正常

查找所有符合给定模式的值(keys *,keys set*)

检查key是否存在

设置key在缓存中的存活时间

返回key的剩余时间。其中-1表示不过期,-2表示已过期或不存在

返回key所存储值的类型

删除key

重命名

库命令

select index

move key index

flushdb

flushall

切换库

把key移动到几号库(index是库编号)【如果index库内有重名则失败】

清空当前数据库

清空当前实例下所有的数据库

键或值

数据类型

特点

使用场景

命名规则

意义

key

string

项目名:对象:属性 value

jd:user:username  张三

value

string

常用

字符串

验证码

分布式锁

朋友圈点赞

set key value

get key

setex key seconds value

setnx key value

incr key

设置key

获取value

设置过期时间

当key不存在时,设置key值

key的value自增1

hash

(相当于java中的hashmap)

必须要成对出现

存储对象

hset key field value

hget key field value

hmset key f1 v1 f2 v2

hmget key f1 f2

hdel key k1

hlen key

hkeys key

hvals key

hgetall key

hdel key field

设置key中字段field的值设为value

获取value

设置多个field和value

获取多个value

删除field和value

属性field的个数

获取key的所有属性filed

获取key的所有values

获取key的所有field和values

删除field属性

list

(相当于java的linkedlist)

按照插入顺序

重复元素

消息队列

lpush key value1 value2

【先进排end,后进排start】

rpush key value1 value2

【正常,先进即排start】

lrange key start stop

rpop key

llen key

brpop key1 key2 timeout

将多个值插入列表头部

存语句123,实际排序321

将多个值插入列表尾部

存语句123,实际排序123

获取列表指定范围内的元素

移除并获取列表最后一个元素

获取长度

移除并获取最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

set

(相当于java中的hashset)

无序集合

无重复元素

抽奖

共同好友

好友推荐

sadd key member1 member2

smembers key

scard key

srem key value

spop key

sinter key1 key2

sunion key1 key2

sdiff key1 key2

添加

取出所有元素

集合的长度

移除集合中的一个或多个元素

随机获取一个元素并移除

获取两个set集合的交集

获取两个set集合的并集

获取差集(注意集合顺序影响结果)

sorted set(简称zset)

元素关联score,并由小到大排列

有序集合

无重复元素

排行榜

zadd key score1 member1

zrange key start stop

zrevrange key start stop

zrem key member

添加 分数+对象

按照升序排序获取值,0 -1获取所有

按照降序排序获取值

移除有序集合的某个元素

缓存雪崩

缓存穿透

缓存击穿

Redis持久化:数据从内存同步到硬盘(文件)中

方式(2)

开启方式

概念

特点

方式1:RDB

(redis database)

默认开启

1、在指定时间间隔内,将内存中的数据集快照写入磁盘

2、写入方式:二进制,默认dump.rdb

save 900 1 每900s至少1个key发生变化,则dump内存快照

save 300 10

save 60 10000 【redis.windows.conf】

优点:

文件体积小

持久化较快

缺点:

容易产生数据丢失

(一定时间间隔)

redis持久化, RBD(Redis Database)和AOF(Append Only File)__console_的博客-CSDN博客_关闭appendonly

方式2:AOF

(append only file)

手动开启

1、将每一个收到的写的命令通过write函数追到加到文件中

2、默认不开启

appendfsync always 每执行一次更新命令,持久化一次

appendfsync everysec 每秒钟持久化一次

appendfsync no 不持久化

优点

数据完整型好

缺点

文件体积大

持久化效率低

spring data redis提供redistemplate

valueoperations

简单k-v操作

setoperations

set类型数据操作

zsetoperations

zset类型数据操作

hashoperations map类型数据操作

listoperations

list类型数据操作

redis 面试详解相关推荐

  1. 怎么往integer型数组添加数据_用户日活月活怎么统计 - Redis HyperLogLog 详解

    HyperLogLog 是一种概率数据结构,用来估算数据的基数.数据集可以是网站访客的 IP 地址,E-mail 邮箱或者用户 ID. 基数就是指一个集合中不同值的数目,比如 a, b, c, d 的 ...

  2. python redis用法详解

    使用python来操作redis用法详解 1.1 2017.06.22 16:38* 字数 4875 阅读 96923评论 8喜欢 60 1.redis连接 redis提供两个类Redis和Stric ...

  3. java集成redis集群_spring集成redis cluster详解

    客户端采用最新的jedis 2.7 1.maven依赖: redis.clients jedis 2.7.3 2.增加spring 配置 classpath:connect-redis.propert ...

  4. redis数据结构详解之Hash(四)

    原文:redis数据结构详解之Hash(四) 序言 Hash数据结构累似c#中的dictionary,大家对数组应该比较了解,数组是通过索引快速定位到指定元素的,无论是访问数组的第一个元素还是最后一个 ...

  5. Redis命令详解:Hashs

    Hash是一种String类型的field.value的映射表,因此,它非常适合存储对象.下面我们来一一介绍与Hash相关的命令. HDEL 最早可用版本:2.0.0 时间复杂度:O(N),其中N为要 ...

  6. python操作redis set_Python操作redis学习系列之(集合)set,redis set详解 (六)

    #-*- coding: utf-8 -*- importredis r= redis.Redis(host="126.56.74.190",port=639,password=& ...

  7. redis 数据类型详解 以及 redis适用场景场合

    redis 数据类型详解 以及 redis适用场景场合 1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访 ...

  8. Redis数据结构详解之Zset(五)

    原文:Redis数据结构详解之Zset(五) 序言 Zset跟Set之间可以有并集运算,因为他们存储的数据字符串集合,不能有一样的成员出现在一个zset中,但是为什么有了set还要有zset呢?zse ...

  9. 面试详解之Java8为什么用红黑树来实现HashMap

    面试详解之Java8为什么用红黑树来实现HashMap 文章目录 面试详解之Java8为什么用红黑树来实现HashMap 一.背景简介 二.为什么要用红黑树 2.1 红黑树概述 2.2 红黑树性质 2 ...

最新文章

  1. 2018-2019-1 20165324_20165302_20165321 实验一 开发环境的熟悉
  2. Codeforces Round#310 div2
  3. Android 监听home键(android:launchMode=singleTask 与 onNewIntent(Intent intent) 的用法
  4. matlab 连通分支,(完整版)图的连通性判断matlab实验报告
  5. 判断线段相交 + vector. erase迭代指针 的使用 poj 2653 Pick-up sticks
  6. 视觉SLAM笔记(47) 优化 PnP 的结果
  7. mysql 控制台环境下查询中文数据乱码,插入、更新中文数据不成功
  8. 现实JS模板,可设置默认值
  9. java版教材管理系统源码
  10. php圆角的度数计算公式,弧度和角度的换算器(度数换算计算器)
  11. Excel函数大全-12统计函数
  12. 【脑电数据十折交叉验证】实现对数据自动划分训练集与测试集得出平均分类准确率
  13. python语法糖是什么意思_Python中的甜蜜语法糖,甜甜的
  14. Python办公自动化——批量发送邮件
  15. Appium-iOS环境搭建
  16. openssl的算法套件格式映射IANA的格式
  17. oracle12突然出现ora12514,【ORACLE】提示ORA-12514错误处理
  18. EMLOG模板山河网站主题分享
  19. 移动硬盘数据丢失如何快速恢复?
  20. Techo TVP物联网开发者峰会青润的总结

热门文章

  1. NCC多尺寸模板匹配MATLAB
  2. leap motion java_[Leap Motion开发文档翻译]Leap Motion架构
  3. STM32 f_getfree函数读取sd卡一直不返回的解决方法
  4. 用计算机画二次元,画一个二次元萌妹子 分享一份电脑画画的步骤
  5. java 调用scp命令,scp命令的使用
  6. 商标专利注册申请流程
  7. 局域网如何连接打印机
  8. Zabbix监控服务器异常IP登录
  9. Python爬虫系列:爬取小说并写入txt文件
  10. 浅谈JavaScript继承与原型链