IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> redis -> 正文阅读

[大数据]redis

Redis是一款开源的、内存中的数据结构存储系统,它可以用作数据库、缓存、消息中间件。
它支持多种数据结构,如字符串、散列(hash)、列表(list)、集合(set)、有序集合(sort set);与范围查询、bitmaps、hyperloglogs、地理空间、索引半径查询。
redis内置了副本(Replication)、事务(Transaction)、和不同级别的磁盘持久化(Persistence)、并通过哨兵机制、Cluster集群提供高可用性。

知识点

想要玩转redis,我们需要知道哪些知识点呢?
redis配置,默认,非默认,集群,多实例,连接池参数等
redis读写操作,RedisTemplate的基本使用。
几种序列化方式对比

RedisTemplate

RedisTemplate 封装了 RedisConnection,具有连接管理,序列化和 Redis 操作等功能。
几种序列化方式对比

挖矿病毒

挖矿病毒,利用Redis的未授权访问漏洞进行攻击。Redis 默认配置为6379端口无密码访问,如果redis以root用户启动,攻击者可以通过公网直接链接redis,向root账户写入SSH公钥文件,以此获取服务器权限注入病毒

高可用

redis集群是由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinel也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展。redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单。

节点之间相互连接,关系平等、去中心化,每个节点都有分片处理功能。这样就可以很好的保证redis的高可用性。
Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。这样就可以很好的保证redis的高可用性。

数据结构

Redis可以存储键与5种不同数据结构类型之间的映射,分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。
缓存:缓存的目的是快速读取与写入。
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。

说明:
1)Redis不支持自定义数据库名
2)Redis不支持为每个数据库设置密码
3)Redis的多个数据库之间不是完全隔离的,FLUSHALL命令会清空所有数据库的数据
a)FLUSHALL – 清空所有数据库的所有数据
b)FLUSHDB – 清空当前所在数据库的数据

安装与编译

如果是用apt-get或者yum install安装的redis,可以直接通过下面的命令停止/启动/重启redis
/etc/init.d/redis-server stop
/etc/init.d/redis-server start
/etc/init.d/redis-server restart

如果是通过源码安装的redis,则可以通过redis的客户端程序redis-cli的shutdown命令来重启redis

1.redis关闭
redis-cli -h 127.0.0.1 -p 6379 shutdown

2.redis启动
redis-server

3.如果上述方式都没有成功停止redis,使用终极武器 kill -9

1、解压Redis
tar xzvf /usr/redis/redis-4.0.9.tar.gz -C /usr/redis/
2、编译及安装
[root@localhost redis]# cd /usr/redis
[root@localhost redis]# make && make install

3、关闭Redis服务
pkill redis-server
killall redis-server

redis配置文件

3、创建文件夹run、logs、dbcache
mkdir -p /usr/redis/redis-6379/{run,conf,logs,dbcache}
#配置文件修改(略)
/usr/redis/redis-6379/conf/redis.conf

4、启动Redis服务,使用redis.conf
/usr/redis/src/redis-server /usr/redis/redis-6379/conf/redis.conf

启动redis
find ./700* | egrep “.(conf)” | awk ‘{system("./src/redis-server "$1)}’
等价于 分别执行 ./src/redis-server ./7001/redis-7001.conf

批量停止 ps -ef|grep redis|grep -v grep| awk ‘{system("kill -9 "$2)}’

命令

FLUSHALL – 清空所有数据库的所有数据(不起作用)
FLUSHDB – 清空当前所在数据库的数据

keys * 查询所有键

set get 字符串命令

set name zhangsan #set设置的两个数据的key内容是相同的,则默认覆盖

SETEX
[SETEX key seconds value] 安全
setex login 10 zhangsan 设置张三登录有效时间为10秒

ttl key 查询剩余有效时间,过期返回-2
persist key 修改有效期为永久时间,返回-1
MSET KEY1 VALUE1 KEY2 VALUE2 KEY3 VALUE3 设置多个key
mset username1 zhangsan username2 lisi username3 wangwu

msetnx
[msetnx]不覆盖设置多个key,成功返回1,若存在重复则添加失败返回0
msetnx username zhangsan1 #返回1
msetnx username zhangsan2 username2 lisi username3 wangwu #返回0

append
append key value 追加内容

set username hello
append username world

del key key key删除指定内容,返回2(指定key不存在,不会影响删除操作)

HASH
hset dept id 1001 返回(integer) 0 true
hget dept id
hkeys dept * 获取dept所有hash key
hsetnx dept id 1002 返回0(false)
hsetnx dept id2 1002 返回1(true)
hmset dept id 1001 name 销售部 level 1
hlen 元素个数
hexists dept id 判断是否存在
hdel KEY VALUE1 VALUE2 删除
hkeys dept * 获取dept所有hash key
HVALS key 获取哈希表中所有值

127.0.0.1:6379> hvals dept
1) ""1003""
2) ""\xe9\x94\x80\xe5\x94\xae\xe9\x83\xa8"" #销售部
3) ""2""

"hgetall dept #获取所有KEY VALUE

127.0.0.1:6379> hgetall dept
1) ""id""
2) ""1003""
3) ""name""
4) ""\xe9\x94\x80\xe5\x94\xae\xe9\x83\xa8""
5) ""level""
6) ""2""
数字操作

set numberid 1 设置普通数据id
hset dept id 1 设置HASH数据id
incr numberid #自增1,结果=2
decr numberid #自减1
incrby numberid 5 #自增指定数量5,结果7
decrby numberid 5 #自减指定数量5,结果7-5
hincrby dept id 1 哈希数据类型自增
hincrby dept id -1 哈希数据类型自减

List集合

lpush
lpush KEY VALUE #向栈中压入数据(push属于入栈,栈的特点是先进后出)
lpush book yuwen shuxue computer[java,oracle,redis]

rpush
rpush 栈底入栈(right push)
rpush book English 从尾部保存元素(栈底入栈)

lrange
取得指定索引位置的值:lrange 集合KEY startIndex endIndex
lrange book 0 5
lrange book 0 -1 #取得所有

llen
llen key #查询数量

linsert 在元素前追加内容
格式:linsert 集合KEY BEFORE|AFTER VALUE NEWVALUE

127.0.0.1:6379> linsert book BEFORE yuwen springboot
127.0.0.1:6379> lrange book 0 -1
1) computer[java,spring,oracle,redis]
2) shuxue
3) springboot
4) yuwen

127.0.0.1:6379> linsert book after yuwen springcloud 
(integer) 5
127.0.0.1:6379> lrange book 0 -1
1) computer[java,spring,oracle,redis]
2) shuxue
3) springboot
4) yuwen
5) springcloud
注:当list集合有重复数据,则linsert插入默认栈顶向下第一个数据为准

lset 修改指定索引的内容
lset book 3 语文
lset book 3 yuwen

lrem 删除
lrem key COUNT VALUE

lrem book 1 yuwen 删除1个语文
lrem book 3 yuwen 删除重复3个的语文

ltrim 删除范围外数据(保留指定范围内的数据)
格式:ltrim KEY startIndex endIndex
ltrim book 0 9
lpop rpop 从集合的头部删除元素,并返回删除元素(栈顶元素出栈)
rpop book(栈底元素出栈)
lpop book

rpoplpush 将移除的元素添加到指定的集合中
lindex KEY index 取得元素的索引的内容
lindex book 2 #springboot

Set集合类型(无序)

sadd letter a b c d e; //添加set集合及元素
smembers letter;

srem 集合key 元素 //删除set集合元素
srem letter e; //删除字母e
spop letter //栈顶元素出栈
sdiff key1 key2 //返回两个集合的差集
sdiffstore //将差集保存到新的集合中
sinter 集合key1 key2交集计算
sinterstore //将交集保存到新的集合中
sunion key1 key2 //将两个集合合并
sunionstore key1 key2 //将并集结果存储
scard key //返回集合个数
sismember key value //验证member是否是key的set元素
srandmember 集合key //随机查询名称为key的一个集合元素

SortedSet集合类型(顺序)

zadd
zrange key startIndex endIndex value

Redis 事务

Redis乐观锁
127.0.0.1:6379> set age 30
OK
127.0.0.1:6379> discard #关闭(回滚)事务
127.0.0.1:6379> mutil #开启事务
测试:
127.0.0.1:6379> set age 31
QUEUED
127.0.0.1:6379> set age 32
QUEUED
127.0.0.1:6379> exec

  1. OK
  2. OK
    127.0.0.1:6379> get age
    “32”

集群操作

创建不含slaver 的集群
./src/redis-cli --cluster create 172.16.71.183:7001 172.16.71.183:7002 172.16.71.183:7003 --cluster-replicas 0
变更主从关系
redis-cli -h 192.168.0.251 -p 6390 cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e

cluster meet 将指定节点加入到集群

客户端连接

/usr/redis/src/redis-cli -h 127.0.0.1 -p 6379 -a 123456

参考资料

Codis的架构设计
https://blog.csdn.net/shmiluwei/article/details/51958359

Redis持久化存储(AOF与RDB两种模式)
https://www.cnblogs.com/logo-fox/p/7810530.html

Redis 主从架构搭建及原理详解
https://www.jianshu.com/p/f0e042b95249

Jedis操作单节点redis,集群及redisTemplate操作redis集群(三)
https://blog.csdn.net/qq_36305027/article/details/80686229

JedisCluster 原理介绍
https://www.jianshu.com/p/5ca98b5a336b

Springboot2整合Redis以及jackson序列化
https://blog.csdn.net/zaincs/article/details/84399584

基于Spring的项目中Redis存储对象使用Jackson序列化方式
https://www.zifangsky.cn/1366.html

Redis-5.0.5集群配置
https://www.cnblogs.com/aquester/p/10916284.html

Redis5 cluster人工指定主从关系
https://blog.csdn.net/tianshi_rain/article/details/86612193

集群通信
https://blog.csdn.net/huwei2003/article/details/50973893

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 10:48:29  更:2021-09-08 10:50:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:39:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码