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) 数据结构 字典 跳跃表 使用场景 会话缓存 缓存 计数器 查找表 消息队列 ...
随机推荐
- 【Azure 存储服务】Java Storage SDK 调用 uploadWithResponse 代码示例(询问ChatGTP得代码原型后人力验证)
问题描述 查看Java Storage SDK,想找一个 uploadWithResponse 的示例代码,但是通过全网搜索,结果没有任何有帮助的代码.使用最近ChatGPT来寻求答案,得到非常有格 ...
- Web进阶LNMP网站部署
Web进阶LNMP网站部署 目录 Web进阶LNMP网站部署 LNMP架构工作流程 部署LNMP架构 1.安装nginx 2.安装php 3.安装数据库 将Nginx和PHP建立连接 1.修改ngin ...
- Vue中使用原生js实现轮播图滑动效果
1.在视图层模板里面绑定touchstart和touchend事件 <div class="tuWap" @touchstart="touchStart" ...
- 2023-04-22:给你两个正整数数组 nums 和 target ,两个数组长度相等。 在一次操作中,你可以选择两个 不同 的下标 i 和 j , 其中 0 <= i, j < nums.leng
2023-04-22:给你两个正整数数组 nums 和 target ,两个数组长度相等. 在一次操作中,你可以选择两个 不同 的下标 i 和 j , 其中 0 <= i, j < num ...
- 2022-01-18:将数组分成两个数组并最小化数组和的差。 给你一个长度为 2 * n 的整数数组。你需要将 nums 分成 两个 长度为 n 的数组,分别求出两个数组的和,并 最小化 两个数组和之
2022-01-18:将数组分成两个数组并最小化数组和的差. 给你一个长度为 2 * n 的整数数组.你需要将 nums 分成 两个 长度为 n 的数组,分别求出两个数组的和,并 最小化 两个数组和之 ...
- 2021-12-08:扑克牌中的红桃J和梅花Q找不到了,为了利用剩下的牌做游戏,小明设计了新的游戏规则: 1) A,2,3,4....10,J,Q,K分别对应1到13这些数字,大小王对应0; 2) 游
2021-12-08:扑克牌中的红桃J和梅花Q找不到了,为了利用剩下的牌做游戏,小明设计了新的游戏规则: A,2,3,4-10,J,Q,K分别对应1到13这些数字,大小王对应0; 游戏人数为2人,轮流 ...
- Python实现XSS扫描
利用Python代码实现XSS检测 import requests # HTML转换实体字符 def str_html(source): result = "" for c in ...
- .Net使用第三方onnx或ModelBuilder轻松接入AI模型
ML.Net - 开源的跨平台机器学习框架 支持CPU/GPU训练 轻松简洁的预测代码 可扩展其他的机器学习平台 跨平台 1.使用Visual Studio的Model Builder训练和使用模型 ...
- Python基础 - 解释性语言和编译性语言
什么是机器语言 计算机是不能理解高级语言,当然也就不能直接执行高级语言了.计算机只能直接理解机器语言,所以任何语言,都必须将其翻译成机器语言,计算机才能运行高级语言编写的程序. 如何把我们写的代码 ...
- hvv蓝初面试常见漏洞问题(下)
hvv蓝初面试常见漏洞问题(上) 6.ssrf 服务端伪造请求 原理 服务端提供了向其他服务器应用获取数据的功能,而没有对目标地址做任何过滤和限制.攻击者进而利用其对内部资源进行攻击.(通俗来说:就是 ...