redis基础归纳

redis归纳

特点:

支持数据的持久化,可以将数据写入硬盘,重启时再次加载使用
除普通键值数据类型外,还在支持list set zset hash等数据格式的存储
支持主从数据备份

优势:

性能极高,读写速度很快
数据类型比较丰富
操作原子性
还有key过期,通知,等特性

NoSQL 与 SQL 的对比

SQL数据库适合数据关系比较复杂的场景,Nosql反之
SQL对事务的支持非常完善,而NoSQL基本不支持事务

应用场景:

用作缓存,其他特定场景替代传统数据:如社交应用中点赞计数

服务端:

redis-server  --help
sudo redis-server  /etc/redis/redis.conf

客户端:

redis-cli  --help
redis-cli 
ping
select  0_15

库操作:

操作stringkeyhashlistsetzset
set mset setex_hset hmsetlpush rpush;linsert(l1 after(before) b 3)saddzadd k m1 f1 m2 f2
deldeldel hdellrem l1 -2 csremzrem zremrangebyscore
改(增)appendexpire (ttl)____
get mgetkeys exists typehkeys hget hmget hvalslrange l1 0 -1smenberszrange

python的redis调用

创建StrictRedis对象,连接redis服务器,调用对象方法,来操作redis服务器

from  redis import StrictRedis
sr = StrictRedis(host='localhost', port=6379, db=0)```
string:set;setex;mset;append;get;mget
key:keys;exists;type;delete;expire;getrange;ttl
hash:hset;hmset;hkeys;hget;hmget;hvals;hdel
list:lpush;rpush;linsert;lrange;lset;lrem;
set:sadd;smembers;srem;
zset:zadd;zrange;zrangebyscore;zscore;zrem;zremrangebyscore

创建集群StrictRedisCluster对象

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)

redis主从搭建

数据备份,读写分开提高读写效率,提高稳定性

master配置:
sudo vi /etc/redis/redis.conf
bind 本机服务器ip
sudo service redis stop
sudo redis-service /etc/redis/redis.conf 

slave配置:
sudo cp /etc/redis/redis.conf /etc/redis/slave.conf
sudo vi  /etc/redis/slave.conf
bind 192.168.26.128
slaveof 192.168.26.128 6379
port 6378
sudo redis-server slave.conf
查看从属关系:redis-cli -h 192.168.26.128 info Replication

进入主客户端:
redis-cli -h masterIP -p masterPORT 
进入从客户端
redis-cli -h slaveIP  -p slavePORT

搭建集群

集群是一组计算机,他们相互独立但高速网络互联,以单一模式进行管理。当客户接入时,集群像是一个独立的服务器。集群有多台计算机构成,每台台计算机上可能有多个redis服务。

1、配置每台机器的多个redis服务(8001可替换为其他)
8001.conf内容:

port 8001
bind 173.120.136.120
daemonize yes
pidfile 8001.pid
cluster-enabled yes
cluster-config-file 8001_node.conf
cluster-node-timeout 15000
appendonly yes

2、配置完后启动所有服务
redis-server 8001.conf

3、创建集群
把redis的集群包添加到path路径下

cp /usr/share/doc/redis-tools/examples/redis-trib.rb   /usr/local/bin/

安装ruby语言环境,因为redis-trib.rb是ruby开发的

sudo  apt-get  install  ruby

正式创建集群

redis-trib.rb create --replicas 1 IP1:p1 ip2:p2 ip3:p3 ip4:p4 ip5:p5 ip6:p7 

常见问题及解决:

1、报错:MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.,Redis被配置为保存数据库快照,但它目前不能持久化到硬盘。
解决:运行config set stop-writes-on-bgsave-error no 命令后,关闭文件中的配置项stop-writes-on-bgsave-error

2、报错:redis-trib.rb create --replicas 1 创建集群报错,原因可能是ruby版本不对
解决:更新一些redis相关的ruby依赖
查看源

gem  source -l 

添加源

gem source --add https://gems.ruby-china.com/

安装redis相关依赖

sudo gem install redis 

redis注意点

1、创建集群时,必须要创建3个或以上个主节点,否则会创建失败。当存活的主节点数小于总数的一半,集群就停止服务。
2、cluster 是去中心化的,去中间件,集群中每个节点都保存了各自的数据和整个集群的状态。
3、redis集群使用哈希槽的方式来分配数据,比如我们设置一个key时,通过CRC16算法取模得到一个槽位,redis默认有16384个槽位,然后这个key就分配到对应槽位的节点上了,最后这个主节点与其他几点同步数据,最后写入数据完成。读取数据是redis根据一致性哈希算法对应到某一个节点获取数据。
4、如果一个master挂了,redis会启动它的一个slave充当master。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值