redis非关系型数据库知识点

1、安装redis
sudo apt-get update
sudo apt-get install redis-server
启动 : redis-server
开启客户端 :redis-cli
切换数据库select n
查看进程 ps -ef|grep redis
杀死redis服务器 sudo kill -9 pid

2、redis 数据结构
redis是key-value的数据结构,每条数据都是⼀个键值对
键的类型是字符串

值的类型分为五种:
    字符串string
    哈希hash
    列表list
    集合set
    有序集合zset

3、string 类型
字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。

设置键值 set key value
设置键值及过期时间,以秒为单位 setex key seconds value
设置多个键值 mset key1 value1 key2 value2 
追加值 append key value
获取:根据键获取值,如果不存在此键则返回nil get key
根据多个键获取多个值 mget key1 key2 

4、hash 类型
⽤于存储对象,对象的结构为属性、值,值的类型为string

设置单个属性 hset key field value

设置多个属性 hmset key field1 value1 field2 value2 
获取 获取指定键所有的属性 hkeys key
获取⼀个属性的值 hget key field
获取多个属性的值 hmget key field1 field2 
获取所有属性的值 hvals key
删除整个hash键及值,使⽤del命令
删除属性,属性对应的值会被⼀起删除 hdel key field1 field2

5、list类型
列表的元素类型为string,按照插⼊顺序排序
在左侧插⼊数据 lpush key value1 value2
在右侧插⼊数据 rpush key value1 value2
在指定元素的前或后插⼊新元素 linsert key before或after 现有元素 新元素

获取元素  lrange key start stop
start、stop为元素的下标索引
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素

设置指定索引位置的元素值  lset key index value
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示尾部开始计数,如-1表示最后⼀个元素

删除 lrem key count value
列表中前count次出现的值为value的元素移除
count > 0: 从头往尾移除
count < 0: 从尾往头移除
count = 0: 移除所有

6、set 类型
⽆序集合
元素为string类型
元素具有唯⼀性,不重复
说明:对于集合没有修改操作

添加元素 sadd key member1 member2
返回所有的元素 smembers key
删除指定元素 srem key member

7、zset 类型
sorted set,有序集合
元素为string类型
元素具有唯⼀性,不重复
每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序
说明:没有修改操作

添加 zadd key score1 member1 score2 member2

获取 zrange key start stop
返回指定范围内的元素
start、stop为元素的下标索引
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素

返回score值在min和max之间的成员 zrangebyscore key min max
返回成员member的score值 zscore key member
删除指定元素 zrem key member1 member2
删除权重在指定范围的元素 zremrangebyscore key min max

8、通用命令
查找键,参数⽀持正则表达式 keys pattern

判断键是否存在,如果存在返回1,不存在返回0  exists key1
查看键对应的value的类型 type key
删除键及对应的值 del key1 key2
设置过期时间,以秒为单位,如果没有指定过期时间则⼀直存在,直到使⽤DEL移除
expire key seconds
查看有效时间,以秒为单位 ttl key

9、与Python的交互(使用redis包)
from redis import *
通过init创建对象,指定参数host、port与指定的服务器和端⼝连接,host默认为localhost,port默认为6379,db默认为0
redis = StrictRedis(host=‘localhost’, port=6379, db=0)

9、1 string类型
set、setex、mset、append、get、mget、key


9.2 hash类型
hset、hmset、hkeys、hget、hmget、hvals、hdel

9.3 list类型
lpush、rpush、linsert、lrange、lset、lrem

9.4 set 类型
sadd、smembers、srem
9.5 zset类型
zadd、zrange、zrangebyscore、zscore、zrem、zremrangebyscore

9.6 keys
exists、type、delete、expire、getrange、ttl

10、redis主从结构
https://blog.csdn.net/github_26672553/article/details/69568259
如果我们redis的压力很大,如果我们的并发高到我们读数据和写数据都有了很大压力。
那么我们可能就需要把redis分开部署,并且配置为一个『主从』的状态。

下载redis-4.0.6.tar.gz(当前最新稳定版)
地址:http://download.redis.io/releases/
安装目录:usr/local/redis
安装包下载目录:/opt/redis

安装命令如下
mkdir /usr/local/redis
cd /opt
tar zxvf redis-4.0.6.tar.gz
cd redis-4.0.6.tar.gz 
make PREFIX=/usr/local/redis install

make失败时查看时候安装gcc环境

如未安装可通过
yum install gcc 

将Redis启动脚本添加至linux系统init.d启动目录中

cp /opt/redis-4.0.6/utils/redis_init_script /etc/init.d/reids
此命令将redis_init_script复制至init.d目录下并重命名为redis

添加注册服务
chkconfig --add redis
这时会报错  redis don't support chkconfig

修改redis脚本

vim /etc/init.d/redis
在第二行增加  #chkconfig:2345 80 90

将以下两处地址更换为你的安装路径
EXEC=/usr/local/redis/bin/redis-server   
CLIEXEC=/usr/local/redis/bin/redis-cli

redis开启的命令,以后台运行的方式执行
$EXEC $CONF & 
&,即是将服务转至后台运行的意思,否则会导致redis占据前台无法执行其他命令

mkdir /etc/redis
cp /opt/redis-4.0.6/redis.conf /etc/redis/6379.conf

这时可注册redis服务
chkconfig --add redis
启动服务 service redis start

添加redis命令至环境变量中
vim /etc/profile
export PATH="$PATH:/usr/local/redis/bin"

source /etc/profile

启用认证并设置密码
vim /etc/redis/6379.conf
找到requirepass字段 去掉#号后可在后面添加密码
requirepass -Tq8UA7zredis
密码生效需重启计算机
进入redis

redis-cli验证redis启动情况


开启远程访问
redis默认不开启远程认证
1>修改6379.conf配置文件注释掉bind 127.0.0.1 开启远程访问 (应用bind可指定固定IP远程访问)
2>默认不是守护进程方式运行,这里可以修改
daemonize yes
3>禁用保护模式
protected-mode no
Redis服务器设置密码后,使用service redis stop 会出现以下信息:

执行service redis stop
Stopping ...
OK
(error) NOAUTH Authentication required.
Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...
Waiting for Redis to shutdown ...

出现这样的错误信息,redis 这时是没有停止服务的。
修改vim /etc/init.d/redis
$CLIEXEC -a "password" -p $REDISPORT shutdown
password为你设置的密码
主从配置
10 .36.2.111 6379 主
10.36.2.112 6379
两台安装redis服务的主机

主不需要配置
从 redis.conf配置修改
#配置主节点信息    
slaveof 10.36.2.111 6379
#主节点密码    
masterauth "123456"

哨兵配置
sentinel.conf配置如下
sentinel monitor mymaster 10.36.2.111 6379 1
1代表当1个哨兵发现问题
sentinel down-after-milliseconds mymaster 3000  
sentinel failover-timeout mymaster 10000 
#redis主节点密码  
sentinel auth-pass mymaster 123456
#保护模式  
protected-mode no 

注意 先启动redis 再启动哨兵 注意linux开启端口
redis-server /home/redis/redis/redis.conf
redis-sentinel /home/redis/redis/sentinel.conf 

另外主redis也要设置#主节点密码    

masterauth "123456"  防止主库挂掉切换从库为主库,原主库再启动时连接不到现主库

11、主从结构
Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构. 可以避免Redis单点故障,构建读写分离架构,满足读多写少的应用场景.

Redis复制功能的几个重要方面

1. 一个Master可以有多个Slave;
2. Redis使用异步复制。从2.8开始,Slave会周期性(每秒一次)发起一个Ack确认复制流(replication stream)被处理进度;
3. 不仅主服务器可以有从服务器,从服务器也可以有自己的从服务器,多个从服务器之间可以构成一个图状结构;
4. 复制在Master端是非阻塞模式的,这意味着即便是多个Slave执行首次同步时,Master依然可以提供查询服务;
5. 复制在Slave端也是非阻塞模式的:如果你在redis.conf做了设置,Slave在执行首次同步的时候仍可以使用旧数据集提供查询;你也可以配置为当Master与Slave失去联系时,让Slave返回客户端一个错误提示;
6. 当Slave要删掉旧的数据集,并重新加载新版数据时,Slave会阻塞连接请求(一般发生在与Master断开重连后的恢复阶段);
7. 复制功能可以单纯地用于数据冗余(dataredundancy),也可以通过让多个从服务器处理只读命令请求来提升扩展性(scalability):比如说,繁重的 SORT 命令可以交给附属节点去运行。
8. 可以通过修改Master端的redis.config来避免在Master端执行持久化操作(Save),由Slave端来执行持久化

https://blog.csdn.net/a67474506/article/details/50435206?utm_source=blogxgwz4

12、创建集群
redis的安装包中包含了redis-trib.rb,⽤于创建集群
接下来的操作在172.16.179.130机器上进⾏
将命令复制,这样可以在任何⽬录下调⽤此命令

sudo cp /usr/share/doc/redis-tools/examples/redis-trib.rb /usr/local/bin/
sudo apt-get install ruby

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

-- 先查看⾃⼰的 gem 源是什么地址
gem source -l -- 如果是https://rubygems.org/ 就需要更换
-- 更换指令为
gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
-- 通过 gem 安装 redis 的相关依赖
sudo gem install redis
-- 然后重新执⾏指令

13、集群与python交互
安装交互包 pip install redis-py-cluster
例子:
from rediscluster import *
if name == ‘main’:
try:
# 构建所有的节点,Redis会使⽤CRC16算法,将键和值写到某个节点上
startup_nodes = [
{‘host’: ‘192.168.58.666’, ‘port’: ‘6000’},
{‘host’: ‘192.168.58.555’, ‘port’: ‘6003’},
{‘host’: ‘192.168.58.999’, ‘port’: ‘6001’},
]
# 构建StrictRedisCluster对象
src=StrictRedisCluster(startup_nodes=startup_nodes,decode_responses=True)

        result=src.set('name','小王')
        print(result)
        # 获取键为name
        name = src.get('name')
        print(name)
    except Exception as e:
        print(e)

猜你喜欢

转载自blog.csdn.net/qq_36455530/article/details/85054691