RUN__IT # Redis

Redis是一种内存中的key-value非关系型数据库,支持数据持久化、主从配置和集群搭建。本文涵盖了Redis的安装、配置过程,以及数据操作的string、hash、list、set和zset类型。还介绍了如何在Python环境中与Redis进行交互,包括主从配置和集群搭建。
摘要由CSDN通过智能技术生成

Redis

redis是nosql的一种数据库,是以key-value形式保存在内存中的,并且支持数据持久化
存储的一种非关系型数据库。
内存中:读取和写入速度非常快
持久化存储:写入磁盘或者文件(两种本分数据的方式.aof RDB)
支持主从配置

应用场景:图片验证码,手机验证码保存在redis中,session保存在redis

redis的安装


- step1:下载

> wget http://download.redis.io/releases/redis-4.0.9.tar.gz

- step2:解压

  > tar xzf redis-4.0.9.tar.gz

- step3:移动,放到usr/local⽬录下

  > sudo mv ./redis-4.0.9 /usr/local/redis/

- step4:进⼊redis⽬录

  > cd /usr/local/redis/

- step5:生成

  > sudo make

- step6:测试,这段运⾏时间会较⻓

> sudo make test

- step7:安装,将redis的命令安装到/usr/local/bin/⽬录

  > sudo make install

- step8:安装完成后,我们进入目录/usr/local/bin中查看

  > cd /usr/local/bin
  > ls -all

- step9:配置⽂件,移动到/etc/⽬录下

- 配置⽂件⽬录为/usr/local/redis/redis.conf

  > sudo cp /usr/local/redis/redis.conf     /etc/redis/

配置

Redis的配置信息在/etc/redis/redis.conf下。

查看     sudo vi /etc/redis/redis.conf
绑定ip:如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip
bind 127.0.0.1

端⼝,默认为6379
port 6379

是否以守护进程运⾏

如果以守护进程运⾏,则不会在命令⾏阻塞,类似于服务
如果以⾮守护进程运⾏,则当前终端被阻塞
设置为yes表示守护进程,设置为no表示⾮守护进程
推荐设置为yes
daemonize yes

数据⽂件

dbfilename dump.rdb

数据⽂件存储路径
dir /var/lib/redis

⽇志⽂件
logfile "/var/log/redis/redis-server.log"

数据库,默认有16个
database 16

主从复制,类似于双机备份。
slaveof
  • 服务器端的命令为redis-server

  • sudo redis-server /etc/redis/redis.conf (指定的配置文件启动)

  • 可以使⽤help查看帮助⽂档

    redis-server --help

  • 个人习惯

    ps aux | grep redis 查看redis服务器进程
    sudo kill -9 pid 杀死redis服务器
    sudo redis-server /etc/redis/redis.conf 指定加载的配置文件

  • 客户端的命令为redis-cli

  • 可以使⽤help查看帮助⽂档

    redis-cli --help

     如果你在配置文件中设置了bind  内网地址,
     redis-cli  -h 配置文件指定的bind后面的地址 -p 
      
     exit 
    

数据操作

string

设置键值
set key value

设置键值及过期时间,以秒为单位
setex key seconds value

设置多个键值
mset key1 value1 key2 value2 ...

追加值
append key value

获取:根据键获取值,如果不存在此键则返回nil
get key

根据多个键获取多个值
mget key1 key2 ...

参数⽀持正则表达式
查看所有键
keys *

查看名称中包含a的键
keys 'a*'

判断键是否存在,如果存在返回1,不存在返回0
exists key1

查看键对应的value的类型
type key

删除键及对应的值
del key1 key2 ...

如果没有指定过期时间则⼀直存在,直到使⽤DEL移除
设置键'a1'的过期时间为3秒
expire 'a1' 3

查看有效时间,以秒为单位
ttl key

hash类型

  • 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 ...

list类型

在左侧插⼊数据
lpush key value1 value2 ...

在右侧插⼊数据
rpush key value1 value2 ...

在指定元素的前或后插⼊新元素
linsert key before或after 现有元素 新元素

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

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

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

set类型

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

添加元素
sadd key member1 member2 ...

返回所有的元素
smembers key

删除指定元素
srem key

zset类型

添加
zadd key score1 member1 score2 member2 ...

例1:向键'a4'的集合中添加元素'lisi'、'wangwu'、'zhaoliu'、'zhangsan',权重分别为4、5、6、3
zadd a4 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan


索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
zrange key start stop

返回score值在min和max之间的成员
zrangebyscore key min max

返回成员member的score值
zscore key member

删除指定元素
zrem key member1 member2 ...

删除权重在指定范围的元素
zremrangebyscore key min max

与python交互

进入虚拟环境 安装 pip install redis

from redis import *

try:
    sr = StrictRedis(host='localhost', port=6379, db=0)
    # 简写
    sr=StrictRedis()

    #添加键name,值为itheima
    result=sr.set('name','itheima')
    #输出响应结果,如果添加成功则返回True,否则返回False
    print(result)
    
    #获取键name的值
    result = sr.get('name')
    #输出键的值,如果键不存在则返回None
    print(result)
except Exception as e:
    print(e)
    

主从搭建

修改配置文件

好处:1、读写分离
     2、降低服务器的压力
     3、提高数据的查询效率
     4、备份数据的作用

如何搭建主从? 一主多 

11从:两台服务器,有现在只有一台电脑,可以通过不同的端口来表示不同的redis服务
       我们启动redis服务靠的是什么???
       /etc/redis/redis.conf

       需要有两个配置文件
1、将redis.conf复制一份:sudo cp redis.conf slave.conf

2、获取主机地址  ifconfig 
3、主配置redis.conf
   sudo vim redis.conf.  bind 192.168.11.xxx.  :wq退出vi
4、从配置 slave.conf
   sudo vim slave.conf  bind 192.168.11.xxx 
                        port 6378  
                        slaveof 192.168.11.xxx 6379

5、把现有的redis服务都关了
   ps aux | grep redis
   kill -9 xxx
   service redis stop
   停止所有服务后

6、sudo redis-server /etc/redis/redis.conf  启动主服务
   sudo redis-server /etc/redis/slave.conf 启动从服务


7、ps aux | grep redis

8、redis-cli -h ip -p 6379
   redis-cli -h ip -p 6378

搭建集群

配置
创建集群
安装ruby环境,因为redis-trib.rb是⽤ruby开发的
sudo apt-get install ruby
、好处: 建立在主从之上,包含主从的有点

        提高可用性和可缩放性

2、配置  三主三从

~/Desktop/config
7000.conf
7001.conf
7002.conf
7003.conf
7004.conf
7005.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

启动服务:
由于不是在etc目录下
redis-server 7000.conf  一次启动

搭建集群:参考课件

五、python代码连接集群
pip install redis_py_cluster

from rediscluster import StrickRedisCluster

startup_nodes = [
# 只要其中有一个ip和端口是正确的,就可以进行连接
  {"host":"xxx", "port":xxxx},
  {"host":"xxx", "port":xxxx},
  {"host":"xxx", "port":xxxx},
]
sr = StrickRedisCluster(startup_nodes=startup_nodes, decode_response=True)

sr.set()
python交互
安装包如下
pip install redis-py-cluster


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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值