• 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

  • 相关阅读:
    javaweb消息中间件——rabbitmq入门
    virtual box 桥接模式(bridge adapter)下无法获取ip(determine ip failed)的解决方法
    Apache Kylin本地启动
    git操作
    Java学习总结
    Java中同步的几种实现方式
    hibernate exception nested transactions not supported 解决方法
    vue 中解决移动端使用 js sdk 在ios 上一直报invalid signature 的问题解决
    cookie 的使用
    vue 专门为了解决修改微信标题而生的项目
  • 原文地址:https://www.cnblogs.com/Agnostida-Trilobita/p/11171821.html
Copyright © 2020-2023  润新知