zoukankan      html  css  js  c++  java
  • redis非关系型数据库

    1.redis安装:

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

    tar -zxvf redis-5.0.0.tar.gz

    yum install gcc

    yum install gcc-c++

    make

    cp src/redis-server /usr/bin/

    cp src/redis-cli /usr/bin/

    2.配置文件参数:

    bind 127.0.0.1                                        #对外提供链接的地址

    port 6379                                          #默认端口号

    daemonize no                                        #守护进程(如果是yes后台运行)

    databases 16                                         #(redis数据库用0,1,2,3....代表)

    save 900 1                                        #每900秒有1次增删改操作就同步到磁盘当中

    dbfilename dump.rdb                             #rdb备份方式的文件名字(默认开启)

    dir ./                                                   #备份文件存放位置

    appendonly no                                        #aof备份是否开启(默认不开启)

    appendfilename "appendonly.aof"          #aof备份文件名称

    appendfsync everysec                            #aof同步机制,每秒同步到磁盘当中

    3.数据库命令

    1)启动命令:

    redis-server redis.conf

    2)连接命令:

    redis-cli -h 127.0.0.1 -p 6379

    3)切换数据库:

    select 2

    4.数据库操作

    1)字符串

    添加:set username li

    删除:del username

    设置过期时间:set key value EX timeout或setex key timeout value

    查看过期时间:ttl username

    查看当前redis所有的key:keys *

    2)列表

    在列表左边添加元素:lpush key value

    在列表右边添加元素:rpush key value

    查看列表中的元素:lrange key start stop

    移除并返回列表key的头元素:lpop key

    移除并返回列表的尾元素:rpop key

    指定返回第几个元素:lindex key index

    获取列表中的元素个数:llen key

    删除指定的元素:lrem key count value   count指定删除个数

    3)集合

    添加元素:sadd lan php java python

    查看元素:smembers lan

    移除元素:srem lan php

    查看集合中的元素个数:scard lan

    获取多个集合的交集:sinter team1 team2

    获取多个集合的并集:sunion team1 team2

    获取多个集合的差集:sdiff team1 team2    以左边的集合为标准

    4)哈希

    添加一个新值:hset website baidu baidu.com

    获取哈希中的field对应的值:hget website baidu

    删除field中的某个field:hdel website baidu

    获取某个哈希中所有的field和value:hgetall website

    获取某个哈希中所有的field:hkeys website

    获取某个哈希中所有的值:hvals website

    判断哈希中是否存在某个field:hexists website baidu

    获取哈希中总共的键值对:hlen website

    5.事务操作

    Redis事务可以一次执行多个命令,事务具有以下特征:

    隔离性:事务中的所有命令都会序列化、按顺序地执行,不会被其他命令打扰。

    原子性:事务中的命令要么全部被执行,要么全部都不执行。

    开启一个事务:multi

    提交事务:exec

    回滚事务:discard

    6.发布/订阅

    发布消息:publish channel message

    订阅频道:subscribe chanel

    7.持久化

    rdb与aof区别

     

    8.python连接redis

    1)安装python-redis:

    pip install redis

    2)新建一个文件比如redis_test.py,然后初始化一个redis实例变量,并且在ubuntu虚拟机中开启redis。比如虚拟机的ip地址为192.168.52.233。示例代码如下:

    从redis包中导入Redis类

    from redis import Redis

    初始化redis实例变量

    xtredis = Redis(host='192.168.52.233',port=6379)

    3)对字符串的操作

    操作redis的方法名称,跟之前使用redis-cli一样。

    添加一个值进去,并且设置过期时间为60秒,如果不设置,则永远不会过期

    xtredis.set('username','xiaotuo',ex=60)

    获取一个值

    xtredis.get('username')

    删除一个值

    xtredis.delete('username')

    4)对列表的操作

    同字符串操作,所有方法的名称跟使用redis-cli操作是一样的:

    给languages这个列表往左边添加一个python

    xtredis.lpush('languages','python')

    给languages这个列表往左边添加一个php

    xtredis.lpush('languages','php')

    获取languages这个列表中的所有值

    print xtredis.lrange('languages',0,-1)

    > ['javascript','php','python']

    5)对集合的操作

    给集合team添加一个元素xiaotuo

    xtredis.sadd('team','xiaotuo')

    给集合team添加一个元素datuo

    xtredis.sadd('team','datuo')

    给集合team添加一个元素slice

    xtredis.sadd('team','slice')

    获取集合中的所有元素

    xtredis.smembers('team')

    > ['datuo','xiaotuo','slice'] # 无序的

    6)对哈希(hash)的操作:

    给website这个哈希中添加baidu

    xtredis.hset('website','baidu','baidu.com')

    给website这个哈希中添加google

    xtredis.hset('website','google','google.com')

    获取website这个哈希中的所有值

    print xtredis.hgetall('website')

    > {"baidu":"baidu.com","google":"google.com"}

    7)事务(管道)操作

    redis支持事务操作,也即一些操作只有统一完成,才能算完成。否则都执行失败。

    定义一个管道实例

    pip = xtredis.pipeline()

    pip.set('username', 'litong')

    pip.set('school', 'qinghua')

    pip.execute()

    8)订阅与发布操作

    订阅

    from redis import Redis

    ps = xtredis.pubsub()

    ps.subscribe('email')

    while True:

        for item in ps.listen():

            if item['type'] == 'message':

                data = item.get('data')

                print(data.decode('utf-8'))

    发布

    from redis import Redis

    xtredis = Redis(host='192.168.254.41', port=6379)

    xtredis.publish('email', 'xxx@qq.com')

    9.redis主从

    1)拷贝一份redis配置并命名为slave.conf

    cp redis.conf slave.conf

    2)编辑配置文件

    bind 192.168.52.233

    slaveof 192.168.52.233 6379

    port 6380

    10.redis集群(5.0版本)

    1)创建6个配置文件

    touch{7001..7006}.conf

    2)编辑配置文件

    每个配置文件需修改端口、进程文件名、集群配置文件名

    port 7001                 #绑定端口

    bind 192.168.52.233            #绑定对外连接提供的ip

    daemonize yes                  #开启守护进程

    pidfile 7001.pid                  #进程文件名

    cluster-enabled yes           #是否是集群

    cluster-config-file 7001_node.conf    #集群配置文件

    cluster-node-timeout 15000              #集群连接超时时间(15000ms)

    appendonly yes                         #数据持久化类型

    3)执行配置文件

    redis-server 7001.conf

    redis-server 7002.conf

    redis-server 7003.conf

    redis-server 7004.conf

    redis-server 7005.conf

    redis-server 7006.conf

    4)初始化

    redis-cli --cluster create 192.168.52.233:7001 192.168.52.233:7002 192.168.52.233:7003 192.168.52.233:7004 192.168.52.233:7005 192.168.52.233:7006 --cluster-replicas 1 (数字1表示每个主节点对应一个从节点)

    5)进入数据库验证

    redis-cli -c -h 192.168.52.233 -p 7001

    redis-cli -c -h 192.168.52.233 -p 7002

    redis-cli -c -h 192.168.52.233 -p 7003

  • 相关阅读:
    0916 编程实验一 词法分析程序 总结
    0916 编程实验一 词法分析程序
    0909编译
    C语言文法
    词法分析编译感想
    词法分析
    0909 编译原理
    0429团队3.0
    0428 团队项目合作2.0作业
    0422 数学口袋精灵app
  • 原文地址:https://www.cnblogs.com/Agnostida-Trilobita/p/11171821.html
Copyright © 2011-2022 走看看