1. 通俗易懂的Redis基础
通俗易懂的Redis基础教程(基于CentOS 7)
1 Redis是什么
1.1 NoSQL概念
NoSQL:一类新出现的数据库(not only sql)
- 泛指非关系型的数据库
- 不支持SQL语法
- 存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV形式
- NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景
- NoSQL中的产品种类相当多:
- Redis
- Mongodb
- Hbase hadoop
- Cassandra hadoop
1.2 NoSQL与SQL比较
- 适用场景不同:sql数据库适合用于关系特别复杂的数据查询场景,nosql反之
- 事务 特性的支持:sql对事务的支持非常完善,而nosql基本不支持事务
- 两者在不断地取长补短,呈现融合趋势
1.3 Redis简介
- Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
- Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色
1.4 Redis特性
- Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
1.5 Redis优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
1.6 Redis应用场景
- 用来做缓存(ehcache/memcached)——redis的所有数据是放在内存中的(内存数据库)
- 可以在某些特定应用场景下替代传统数据库——比如社交类的应用
- 在一些大型系统中,巧妙地实现一些特定的功能:session共享、购物车
- 只要你有丰富的想象力,redis可以用在可以给你无限的惊喜…….
2 Redis安装
2.1 Redis官网下载
安装gcc依赖
由于Redis是基于C语言开发的,并且后续要采用gcc进行编译,因此这里提前安装gcc,防止后续出现错误
命令:
yum install -y gcc
安装过程
本机电脑的yum文件已经存在
下载Redis
可以在Redis的官网找到要下载的版本的地址,之后右键复制下载链接,我这里下载的是一个旧版本
官网地址:https://redis.io/download/
(官网首页被墙了,但是download页面没有被墙)
wget https://download.redis.io/releases/redis-6.2.13.tar.gz
2.2 解压Redis
这里将redis解压在/opt/models
下的redis
文件夹里
tar -zvxf redis-6.2.5.tar.gz
将redis文件移动到/opt/redis
下面
mv ./redis-6.2.13 /opt/redis
2.3 安装Redis
进入到redis目录输入make执行编译命令
make
再输入如下命令进行安装
make PREFIX=/opt/redis install
2.4 Redis启动
前台启动
./redis-server
Ctrl + C
退出前台启动
后台启动
从 redis 的源码目录中复制 redis.conf 到 redis 的安装目录(默认是采用redis下的redis.conf
文件启动客户端,这里对文件进行复制,并修改为后台启动后指定配置文件执行redis-server
命令)
cp /opt/redis/redis.conf /opt/redis/bin/
修改 redis.conf 文件,把 daemonize no
改为 daemonize yes
vim redis.conf
之后
:wq
保存退出
指定配置文件启动redis
./redis-server redis.conf
2.5 查看Redis是否启动成功
查看redis是否在后台运行
ps -ef | grep redis
2.6 Redis客户端连接
./redis-cli
是连接本地redis服务的一个命令,通过该命令后可以既可控制redis的脚本控制台
./redis-cli
3 Redis基础配置
Redis的配置信息在/etc/redis/redis.conf
下。
3.1 查看Redis配置文件
通过vim查看redis配置文件
vim /opt/redis/redis.conf
3.2 Redis配置文件解释
3.2.1 绑定ip
如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip(第91行)
3.2.2 端⼝
3.2.3 是否以守护进程运⾏
- 如果以守护进程运⾏,则不会在命令⾏阻塞,类似于服务
- 如果以⾮守护进程运⾏,则当前终端被阻塞
- 设置为yes表示守护进程,设置为no表示⾮守护进程
- 推荐设置为yes
如果不理解守护进程的概念,可以暂时理解为是否以后台程序的方式运行
3.2.4 数据⽂件
3.2.5 数据⽂件存储路径
⽇志⽂件
默认不保存日志文件
数据库
数据库的数量默认为16个
4 Redis命令
4.1 服务器端命令
启动redis服务器
这里不指定配置文件,会默认采用redis安装目录下
redis.conf
作为配置文件
redis-server
查看帮助文档
redis-server --help
查看redis服务器进程
ps aux | grep redis
杀死redis服务器
kill -9 32392
加载指定的文件
redis-server ./redis.conf #采用指定的配置文件启动redis服务器
4.2 客户端命令
连接服务端
redis-cli
查看帮助文档
redis-cli --help
测试连接
ping
切换数据库
数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库
select 10 #切换到第10个数据库
5 Redis数据操作
5.0 Redis的数据结构
redis是key-value的数据结构,每条数据都是⼀个键值对,键的类型是字符串,键不能重复
redis中值的类型分为五种:
- 字符串string
- 哈希hash
- 列表list
- 集合set
- 有序集合zset
redis中的数据操作行为主要有:保存、修改、获取、删除
5.1 String
字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
保存
1 添加键值对
如果设置的键不存在则为添加,如果设置的键已经存在则修改
set key value
例子
set name zhangsan
set idcard 1456789
2 添加键值对并设置过期时间(以秒为单位)
设置键值及过期时间,以秒为单位
setex key seconds value
例子
setex book 3 power
3 设计多个键值
mset key1 value1 key2 value2 ...
例子
mset name1 zhangsan name2 lisi name3 wangwu name4 zhaoliu
4 增加值
append key value
例子
# 向name1 追加hahaha
append name1 hahaha
获取
1 根据键获取值,如果不存在此键则返回nil
get key
例子:
# 获取name1的值
get name1
2 根据多个键获取多个值
mget key1 key2 ...
例子:
# 获取name1 name2 和 name3的值
mget name1 name2 name3 name4
删除
# 删除键的时候会删除对应的值
del key
例子
# 删除name
del name
5.2 key
的相关命令
1 查找键,参数⽀持正则表达式
keys pattern
例子
keys * # 查看全部的键值对
keys n* # 匹配n开头的键
2 判断键是否存在
如果键存在返回
1
,不存在返回0
exists key1
例子
EXISTS age #查看age键是否存在
EXISTS name #查看name键是否存在
EXISTS name10 #查看age10键是否存在
3 查看键对应的value
的类型
type key
例子
type name #查看name键对应的value类型
type name1 #查看name1键对应的value类型
4 删除键及对应的值
del key1 key2 ...
例子
EXISTS name # 查看name键是否存在
del name # 删除name键
EXISTS name # 查看name键是否仍然存在
5 设置键的过期时间,以秒为单位
如果没有指定过期时间则⼀直存在,直到使⽤
DEL
移除
expire key seconds
例子
expire name1 30 # 设置name1的过期时间为30秒
6 查看键值对的有效时间,以秒为单位
ttl key
例子
ttl name1 # 查看name1的有效时间
5.3 hash
命令
5.3.1 增加、修改
1 设置单个属性
hset key field value
例子
hset book name PrideAndPrejudice #设置键book的属性name为`PrideAndPrejudice`
2 设置多个属性
hmset key field1 value1 field2 value2 ...
例子
hmset user name zhangsan age 17 # 设置键user的属性`name`为`zhangsan`、属性`age`为`17`
5.3.2 获取
1 获取指定键所有的属性
hkeys key
例子
hkeys user # 获取键user的所有属性
2 获取⼀个属性的值
hget key field
例子
hget user name #获取键`u2`属性`name`的值
3 获取多个属性的值
hmget key field1 field2 ...
例子
hmget user name age # 获取键user属性name、age的值
4 获取所有属性的值
hvals key
例子
hvals user # 获取键`user`所有属性的值
hvals book
5.3.3 删除
1 删除整个hash键及值,使⽤del命令
删除属性,属性对应的值会被⼀起删除
hdel key field1 field2 ...
例子
hdel user age # 删除键`user`的属性`age`
5.4 list
命令
5.4.1 增加
1 在左侧插⼊数据
lpush key value1 value2 ...
例子
lpush a1 a b c # 从键为a1的列表左侧加⼊数据a,b,c
2 在右侧插⼊数据
rpush key value1 value2 ...
例子
rpush a1 0 1 #从键为`a1`的列表右侧加⼊数据`0、1`
3 在指定元素的前或后插⼊新元素
linsert key before或after 现有元素 新元素
例子
linsert a1 before b 3 #在键为`a1`的列表中元素`b`前加⼊`3`
5.4.2 获取
1 返回列表⾥指定范围内的元素
start
、stop
为元素的下标索引- 索引从左侧开始,第⼀个元素为0
- 索引可以是负数,表示从尾部开始计数,如
-1
表示最后⼀个元素
lrange key start stop
例子
lrange a1 0 -1 #获取键为a1的列表所有元素
5.4.3 设置指定索引位置的元素值
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示尾部开始计数,如-1
表示最后⼀个元素
lset key index value
例子
lset a1 1 zhangsan #修改键为a1的列表中下标为1的元素值为zhangsan
5.4.4 删除
1 删除指定元素
- 将列表中前
count
次出现的值为value
的元素移除- count > 0: 从头往尾移除
- count < 0: 从尾往头移除
- count = 0: 移除所有
lrem key count value
例子
lpush a2 a b a b a b # 向列表`a2`中加⼊元素`a、b、a、b、a、b`
lrange a2 0 -1 #查看列表`a2`的所有元素
lrem a2 -2 b # 从`a2`列表右侧开始删除2个`b`
lrange a2 0 -1 #查看列表`a2`的所有元素
5.5 set
命令
- ⽆序集合
- 元素为string类型
- 元素具有唯⼀性,不重复
- 说明:对于集合没有修改操作
5.5.1 增加
1 添加元素
sadd key member1 member2 ...
例子
sadd a3 zhangsan lisi wangwu zhaoliu #向键`a3`的集合中添加元素`zhangsan`、`lisi`、`wangwu`
5.5.2 获取
1 返回所有的元素
smembers key
例子
smembers a3 # 获取键`a3`的集合中所有元素
5.5.3 删除
1 删除指定元素
srem key
例子
srem a3 wangwu # 删除键`a3`的集合中元素`wangwu`
5.6 zset
命令
- sorted set,有序集合
- 元素为string类型
- 元素具有唯⼀性,不重复
- 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序
- 说明:没有修改操作
5.6.1 增加
1 添加zset
zadd key score1 member1 score2 member2 ...
例子
zadd zddlist 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan
# 向键`a4`的集合中添加元素`lisi`、`wangwu`、`zhaoliu`、`zhangsan`,权重分别为`4、5、6、3`
5.6.2 获取
1 返回指定范围内的元素
start、stop为元素的下标索引;索引从左侧开始,第⼀个元素为0;索引可以是负数,表示从尾部开始计数,如
-1
表示最后⼀个元素
zrange key start stop
例子:
zrange zddlist 0 -1 # 获取键`a4`的集合中所有元素
2 返回score
值在min
和max
之间的成员
zrangebyscore key min max
例子
zrangebyscore zddlist 5 6 # 获取键`a4`的集合中权限值在`5和6之间`的成员
3 返回成员member
的score
值
zscore key member
例子:
zscore zddlist zhangsan #获取键`a4`的集合中元素`zhangsan`的权重
5.6.3 删除
1 删除指定元素
zrem key member1 member2 ...
例子
zrem zddlist zhangsan # 删除集合`zddlist`中元素`zhangsan`
2 删除权重在指定范围的元素
zremrangebyscore key min max
例子:
zremrangebyscore zddlist 5 6 # 删除集合`a4`中权限在`5、6之间`的元素
6 Python与Redis交互
6.1 安装python
的Redis
模块
pip install redis #直接pip install redis安装redis库
由于我这里是采用的Windos主机连接的Linux中的Redis,因此要对Redis的配置文件进行一些修改,使其能够支持远程访问
首先采用vim打开配置文件
1 打开配置文件把下面对应的注释掉
# bind 127.0.0.1
bind 0.0.0.0
2 修改Redis为守护进程运行方式
Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程,设置为no
daemonize yes
3 关闭保护模式
protected-mode no
4 设置密码(不必须)
在 #requirepass foobared 去掉 # 号变requirepass foobared ,注:foobared是密码;
# 设置密码为xxxxxx,密码设置默认是被注释掉的
requirepass password
5 启动redis
./redis-server ./redis.conf
6.2 StrictRedis
对象方法
概述
- 通过init创建对象,指定参数host、port与指定的服务器和端⼝连接,host默认为localhost,port默认为6379,db默认为0
sr = StrictRedis(host='localhost', port=6379, db=0)
简写
sr=StrictRedis()
- 根据不同的类型,拥有不同的实例⽅法可以调⽤,与前⾯学的redis命令对应,⽅法需要的参数与命令的参数⼀致
例子
通过Pycharm运行Python文件处理Redis
from redis import StrictRedis
if __name__=="__main__":
sr = StrictRedis(host='43.136.178.120', port=6379, db=0,password="xxxxxxx")
result = sr.set('name', 'itheima')
print(result)
运行结果
由此可见,连接成功
6.3 使用StrictRedis
对象对Redis
中的数据进行增删改查
1 准备
from redis import StrictRedis
if __name__=="__main__":
try:
# 建立连接
st = StrictRedis(host="43.136.178.120",port=6379,
db=0,password=" 123456")
except Exception as e:
print("----------------Redis连接建立失败-------------------")
print(e)
string-增加
- ⽅法set,添加键、值,如果添加成功则返回True,如果添加失败则返回False
- 编写代码如下
from redis import StrictRedis
if __name__=="__main__":
try:
# 建立连接
st = StrictRedis(host="43.136.178.120",port=6379,
db=0,password=" 123456")
except Exception as e:
print("----------------Redis连接建立失败-------------------")
print(e)
# 1.String添加
result = st.set("name","zhangsan")
# 输出响应结果,响应成功
print(result)
string-获取
- ⽅法get,添加键对应的值,如果键存在则返回对应的值,如果键不存在则返回None
- 编写代码如下
from redis import StrictRedis
if __name__=="__main__":
try:
# 建立连接
st = StrictRedis(host="43.136.178.120",port=6379,
db=0,password=" 123456")
except Exception as e:
print("----------------Redis连接建立失败-------------------")
print(e)
# 2.String获取
result = st.get("name")
# 输出响应结果
print(result)
string-修改
- ⽅法set,如果键已经存在则进⾏修改,如果键不存在则进⾏添加
- 编写代码如下
from redis import StrictRedis
if __name__=="__main__":
try:
# 建立连接
st = StrictRedis(host="43.136.178.120",port=6379,
db=0,password=" 123456")
except Exception as e:
print("----------------Redis连接建立失败-------------------")
print(e)
# 3.String修改
result = st.set("name","lisi")
# 输出响应结果
print(result)
string-删除
- ⽅法delete,删除键及对应的值,如果删除成功则返回受影响的键数,否则则返 回0
- 编写代码如下
from redis import StrictRedis
if __name__=="__main__":
try:
# 建立连接
st = StrictRedis(host="43.136.178.120",port=6379,
db=0,password=" 123456")
except Exception as e:
print("----------------Redis连接建立失败-------------------")
print(e)
# 4.String删除
result = st.delete("name")
# 输出响应结果
print(result)
print(st.get("name"))
获取键
- ⽅法keys,根据正则表达式获取键
- 编写代码如下
from redis import StrictRedis
if __name__=="__main__":
try:
# 建立连接
st = StrictRedis(host="43.136.178.120",port=6379,
db=0,password=" 123456")
except Exception as e:
print("----------------Redis连接建立失败-------------------")
print(e)
# 5.String全部键查找
result = st.keys()
# 输出响应结果
print(result)
其他调用函数的方法和命令行命令并没有什么区别,因此不在这里一一展示
7 Redis主从搭建
7.1 主从概念
⼀个master(主服务器)可以拥有多个slave(从服务器),⼀个slave⼜可以拥有多个slave,如此下去,形成了强⼤的多级服务器集群架构
master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1
通过主从配置可以实现读写分离
master和slave都是一个redis实例(redis服务)
7.2 主从配置
7.2.1 配置主(master)
1 查看当前主机的网卡地址
ifconfig #查看的不是主机ip地址,而是网卡地址
2 修改/etc/redis/redis.conf
文件
vim redis.conf
bind 10.0.0.15
3 启动redis服务
./redis-server ./redis.conf
7.2.2 配置从(replicaof)
1 复制/opt/redis/bin/redis.conf
文件
cp redis.conf ./slave.conf
2 修改redis/slave.conf
文件
vim slave.conf
3 编辑内容
bind 10.0.0.15 #绑定网卡地址
replicaof 10.0.0.15 6379 # 设置其对应的主服务器为10.0.0.15 6379 老版本对应的是slaveof
port 6378 # 设置端口为6378
masterauth 123456 #由于之前给主服务器设置了密码,因此这里要指定密码
# 同时将redis从服务器的密码取消掉
4 redis服务
redis-server slave.conf
5 查看主从关系
redis-cli -h 10.0.0.15 info Replication
7.3 数据操作
1 连接主服务器
在master和slave分别执⾏info命令,查看输出信息 进入主客户端
/opt/redis/bin/redis-cli -h 43.136.178.120 -p 6379 -a 123456
2 连接从服务器
/opt/redis/bin/redis-cli -h 10.0.0.15 -p 6378
3 在master上写数据
set name zhangsan
4 在slave上读数据
get name
注意
Redis从服务器通常(默认情况下)被配置为仅与主服务器连接,并且不允许外网连接。这是因为从服务器的主要目的是从主服务器接收数据并复制它们,以提供冗余和恢复能力。为了确保数据安全性,从服务器应该仅与主服务器连接,并且不应该直接暴露于公共网络中。
因此
/opt/redis/bin/redis-cli -h 43.136.178.120 -p 6378
是连接不上redis服务器的。
8 Redis搭建集群(未完成)
8.1 集群的概念
1 为什么要有集群
- 之前我们已经讲了主从的概念,一主可以多从,如果同时的访问量过大(1000w),主服务肯定就会挂掉,数据服务就挂掉了或者发生自然灾难
- 大公司都会有很多的服务器(华东地区、华南地区、华中地区、华北地区、西北地区、西南地区、东北地区、台港澳地区机房)
2 集群的概念
- 集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性
当请求到来首先由负载均衡服务器处理,把请求转发到另外的一台服务器上。
3 redis集群
- 分类
- 软件层面
- 硬件层面
- 软件层面:只有一台电脑,在这一台电脑上启动了多个redis服务。
- 硬件层面:存在多台实体的电脑,每台电脑上都启动了一个redis或者多个redis服务。
4 搭建集群
- 当前拥有两台主机172.16.179.130、172.16.179.131,这⾥的IP在使⽤时要改为实际值
8.2 配置机器1
在演示中,172.16.179.130为当前ubuntu机器的ip
在172.16.179.130上进⼊Desktop⽬录,创建conf⽬录
在conf⽬录下创建⽂件7000.conf,编辑内容如下
port 7000
bind 172.16.179.130
daemonize yes
pidfile 7000.pid
cluster-enabled yes
cluster-config-file 7000_node.conf
cluster-node-timeout 15000
appendonly yes
在conf⽬录下创建⽂件7001.conf,编辑内容如下
port 7001
bind 172.16.179.130
daemonize yes
pidfile 7001.pid
cluster-enabled yes
cluster-config-file 7001_node.conf
cluster-node-timeout 15000
appendonly yes
在conf⽬录下创建⽂件7002.conf,编辑内容如下
port 7002
bind 172.16.179.130
daemonize yes
pidfile 7002.pid
cluster-enabled yes
cluster-config-file 7002_node.conf
cluster-node-timeout 15000
appendonly yes
总结:三个⽂件的配置区别在port、pidfile、cluster-config-file三项
使⽤配置⽂件启动redis服务
redis-server 7000.conf
redis-server 7001.conf
redis-server 7002.conf
8.3 配置机器2
在演示中,172.16.179.131为当前ubuntu机器的ip
在172.16.179.131上进⼊Desktop⽬录,创建conf⽬录
在conf⽬录下创建⽂件7003.conf,编辑内容如下
port 7003
bind 172.16.179.131
daemonize yes
pidfile 7003.pid
cluster-enabled yes
cluster-config-file 7003_node.conf
cluster-node-timeout 15000
appendonly yes
在conf⽬录下创建⽂件7004.conf,编辑内容如下
port 7004
bind 172.16.179.131
daemonize yes
pidfile 7004.pid
cluster-enabled yes
cluster-config-file 7004_node.conf
cluster-node-timeout 15000
appendonly yes
在conf⽬录下创建⽂件7005.conf,编辑内容如下
port 7005
bind 172.16.179.131
daemonize yes
pidfile 7005.pid
cluster-enabled yes
cluster-config-file 7005_node.conf
cluster-node-timeout 15000
appendonly yes
总结:三个⽂件的配置区别在port、pidfile、cluster-config-file三项
使⽤配置⽂件启动redis服务
redis-server 7003.conf
redis-server 7004.conf
redis-server 7005.conf
8.4 搭建集群
redis的安装包中包含了redis-trib.rb,⽤于创建集群
接下来的操作在172.16.179.130机器上进⾏
将命令复制,这样可以在任何⽬录下调⽤此命令
sudo cp /usr/share/doc/redis-tools/examples/redis-trib.rb /usr/local/bin/
安装ruby环境,因为redis-trib.rb是⽤ruby开发的
sudo apt-get install ruby
在提示信息处输⼊y,然后回⻋继续安装
运⾏如下命令创建集群
redis-trib.rb create --replicas 1 172.16.179.130:7000 172.16.179.130:7001 172.16.179.130:7002 172.16.179.131:7003 172.16.179.131:7004 172.16.179.131:7005
执⾏上⾯这个指令在某些机器上可能会报错,主要原因是由于安装的 ruby 不是最 新版本!
天朝的防⽕墙导致⽆法下载最新版本,所以需要设置 gem 的源
解决办法如下
-- 先查看⾃⼰的 gem 源是什么地址
gem source -l -- 如果是https://rubygems.org/ 就需要更换 -- 更换指令为
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ -- 通过 gem 安装 redis 的相关依赖
sudo gem install redis -- 然后重新执⾏指令
redis-trib.rb create --replicas 1 172.16.179.130:7000 172.16.179.130:7001 172.16.179.130:7002 172.16.179.131:7003 172.16.179.131:7004 172.16.179.131:7005
提示如下主从信息,输⼊yes后回⻋
提示完成,集群搭建成功
数据验证
根据上图可以看出,当前搭建的主服务器为7000、7001、7003,对应的从服务器是7004、7005、7002
在172.16.179.131机器上连接7002,加参数-c表示连接到集群
redis-cli -h 172.16.179.131 -c -p 7002
写⼊数据
set name itheima
⾃动跳到了7003服务器,并写⼊数据成功
在7003可以获取数据,如果写入数据又重定向到7000(负载均衡)
在哪个服务器上写数据:CRC16
- redis cluster在设计的时候,就考虑到了去中⼼化,去中间件,也就是说,集群中 的每个节点都是平等的关系,都是对等的,每个节点都保存各⾃的数据和整个集 群的状态。每个节点都和其他所有节点连接,⽽且这些连接保持活跃,这样就保 证了我们只需要连接集群中的任意⼀个节点,就可以获取到其他节点的数据
- Redis集群没有并使⽤传统的⼀致性哈希来分配数据,⽽是采⽤另外⼀种叫做哈希 槽 (hash slot)的⽅式来分配的。redis cluster 默认分配了 16384 个slot,当我们 set⼀个key 时,会⽤CRC16算法来取模得到所属的slot,然后将这个key 分到哈 希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的 时候看到set 和 get 的时候,直接跳转到了7000端⼝的节点
- Redis 集群会把数据存在⼀个 master 节点,然后在这个 master 和其对应的salve 之间进⾏数据同步。当读取数据时,也根据⼀致性哈希算法到对应的 master 节 点获取数据。只有当⼀个master 挂掉之后,才会启动⼀个对应的 salve 节点,充 当 master
- 需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存 活的主节点数⼩于总节点数的⼀半时,整个集群就⽆法提供服务了
8.5 python与集群交互
安装包如下
pip install redis-py-cluster
redis-py-cluster源码地址https://github.com/Grokzen/redis-py-cluster
创建⽂件redis_cluster.py,示例码如下
from rediscluster import *
if __name__ == '__main__':
try:
# 构建所有的节点,Redis会使⽤CRC16算法,将键和值写到某个节点上
startup_nodes = [
{'host': '192.168.26.128', 'port': '7000'},
{'host': '192.168.26.130', 'port': '7003'},
{'host': '192.168.26.128', 'port': '7001'},
]
# 构建StrictRedisCluster对象
src=StrictRedisCluster(startup_nodes=startup_nodes,decode_responses=True)
# 设置键为name、值为itheima的数据
result=src.set('name','itheima')
print(result)
# 获取键为name
name = src.get('name')
print(name)
except Exception as e:
print(e)
9 Redis可视化面板使用
Redis的可视化面板有很多,这里使用的是
AnotherRedisDeskTopManager
,虽然Redis Desktop Manager
真的很火,但是它收费啊,而这个是免费的其他可视化工具的介绍,请翻看下列网站:2021 强烈推荐几款常用Redis可视化工具 - 知乎 (zhihu.com)
AnotherRedisDesktopManager 发行版 - Gitee.com
9.1 优点
免费且跨平台
界面美观,支持深色模式
功能完善且占用内存小
首先,它是开源的,可以直接在
Github
上下载安装,对于国内用户可以在码云上安装,并且自带简体中文
9.2 安装
安装完成
9.3 基础使用
1 建立连接
连接成功
2 基础设置
3 命令行
其他都是一些增删改查的基础操作,这里不再进行演示
总的来说,这是一个非常中规中矩的免费的Redis可视化工具
1. 通俗易懂的Redis基础的更多相关文章
- windows下使用redis,Redis入门使用,Redis基础命令
windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...
- [.net 面向对象程序设计深入](14)Redis——基础
[.net 面向对象程序设计深入](14)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...
- linux redis基础应用 主从服务器配置
Redis基础应用 redis是一个开源的可基于内存可持久化的日志型,key-value数据库redis的存储分为内存存储,磁盘存储和log文件三部分配置文件中有三个参数对其进行配置 优势:和memc ...
- [.net 面向对象程序设计深入](36)Redis——基础
[.net 面向对象程序设计深入](36)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...
- mysql主从复制、redis基础、持久化和主从复制
一.mysql(mariadb)基础 1.基础命令(centos7操作系统下) 1.启动mysql systemctl start mariadb 2.linux客户端连接自己 mysql -uroo ...
- Redis基础用法、高级特性与性能调优以及缓存穿透等分析
一.Redis介绍 Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库.缓存服务或消息服务使用.Redis支持多种数据结构,包括字符串.哈希表.链表.集合.有序集合.位图.Hype ...
- Redis基础知识补充及持久化、备份介绍(二)--技术流ken
Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...
- Spring-Boot之Redis基础
Spring-Boot之Redis基础 准备 Redis下载地址:github.com/MSOpenTech/redis/releases Redis数据库的默认端口号是 6379 开启Redis服务 ...
- mongodb,Mysql,redis基础教程
数据库基础 1:mongodb基础教程 1:pymongo基础教程 2:Mysql基础教程 3:redis基础教程
- Redis基础知识点面试手册
Redis基础知识点面试手册 基础 概述 数据类型 STRING LIST SET HASH ZSET(SORTEDSET) 数据结构 字典 跳跃表 使用场景 会话缓存 缓存 计数器 查找表 消息队列 ...
随机推荐
- 原来Spring能注入集合和Map的computeIfAbsent是这么好用!
大家好,我是3y,今天继续来聊我的开源项目austin啊,但实际内容更新不多.这文章主是想吹下水,主要聊聊我在更新项目中学到的小技巧. 今天所说的小技巧可能有很多人都会,但肯定也会有跟我一样之前没用过 ...
- 一站式统一返回值封装、异常处理、异常错误码解决方案—最强的Sping Boot接口优雅响应处理器
作者:京东物流 覃玉杰 1. 简介 Graceful Response是一个Spring Boot体系下的优雅响应处理器,提供一站式统一返回值封装.异常处理.异常错误码等功能. 使用Graceful ...
- 配置pip源
1.使用配置文件配置文件[global]trusted-host=pypi.doubanio.comindex-url=https://pypi.doubanio.com/simple配置文件放置位置 ...
- React笔记-Hooks(九)(非常全面)
React笔记-Hooks(九) Hooks 概念 React Hooks 的意思是 组件尽量写成纯函数 如果需要外部功能和副作用 就用钩子把外部代码"钩"进来 函数组件和类组件区 ...
- flutter填坑之旅(有状态组件StatefulWidget)
今天我们来看看flutter的StatefulWidget(有状态组件),最常用就是app 主页的底部导航栏的应用 效果图 首页 关于 我的 statefull-widget-learn .dart ...
- docker升级gitlab
昨天在家部署了gitlab,版本居然是15.10,公司版本却是14.6,升级一波. 官方文档: https://docs.gitlab.com/ee/update/#upgrading-without ...
- 代码随想录算法训练营Day46 动态规划
代码随想录算法训练营 代码随想录算法训练营Day46 动态规划| ● 139.单词拆分 关于多重背包,你该了解这些! 背包问题总结篇! 139.单词拆分 题目链接:139.单词拆分 给定一个非空字符 ...
- BFF层聚合查询服务异步改造及治理实践 | 京东云技术团队
首先感谢王晓老师的[接口优化的常见方案实战总结]一文总结,恰巧最近在对稳健理财BFF层聚合查询服务优化治理,针对文章内的串行改并行章节进行展开,分享下实践经验,主要涉及原同步改异步的过程.全异步化后衍 ...
- [Kotlin Tutorials 22] 协程中的异常处理
协程中的异常处理 Parent-Child关系 如果一个coroutine抛出了异常, 它将会把这个exception向上抛给它的parent, 它的parent会做以下三件事情: 取消其他所有的ch ...
- Pytorch-PyG图神经网络依赖环境安装(Anaconda)
1.默认用户在Anaconda的虚拟环境中已安装Pytorch 2.打开anaconda prompt命令窗, activate "你的虚拟环境名称" 3.在激活后的虚拟环境下输入 ...