redis 安装及使用

一. 安装:
  • 以下步骤运行在 Centos 7:
wget http://download.redis.io/releases/redis-4.0.2.tar.gz

tar xzf redis-4.0.2.tar.gz

cd redis-4.0.2

make
  • 启动服务端
src/redis-server
  • 启动客户端
src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
二. Python 操作 redis
  • 首先安装
    pip3 install redis

来先在 pycharm 里面走一波,和虚拟机交互一下。

  • 一: 先在虚拟机上启动 redis 服务。
  • 二: pycharm走起
import redis

conn = redis.Redis(host='192.168.20.75', port=6379)
# conn.ping()
conn.set('ff', 17)
ret = conn.get('ff')
print(ret)
  • 三: 有错吗兄弟???
    • 别急,跟着节奏来
    首先把你服务端的防火墙关掉。
    systemctl stop firewalld
    systemctl disable firewalld
    
    然后你的错误应该来到了:
    链接redis 时只能通过本地localhost (127.0.0.1)这个来链接,而不能用网络ip(192.168..)这个链接,如果用网络ip 链接会报以下的错误:
    (error) DENIED Redis is running in protected mode because protected mode is enabled...  
    这是说处于保护模式,只能本地链接,我们需要修改配置文
    vim redis.conf 
    第一步: # bind:127.0.0.1
    第二步: Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程,设置为no
    daemonize no
    第三步: 保护模式
    protected-mode no 
    *****第四步:     
    启动的时候,带着配置文件。
    src/redis-server redis.conf
       完美!!!
    

Redis

  • 简介
    redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

  • 配置文件

    • 默认16个数据库 0-15
    • 时间间隔物理写的频度
      save 900 1 #900秒写了一次 就写操作
    • 物理存储名称
      dbfilename
  • Redis是key-value的数据,所以每个数据都是一个键值对

    • 键的类型是字符串
    • 值的类型分五种
      • 字符串 string
      • 哈希 hash
      • 列表 list
      • 集合 set
      • 有序集合 zset
  • redis 操作的五种数据格式再了解一下:

    • 字符串 String操作
    • 哈希 Hash 操作
    • 列表 List 操作
    • 集合 Set 操作
    • 有序集合 Sort Set 操作
  • Redis是key-value的数据,所以每个数据都是一个键值对

- string

    string是redis最基本的类型
    最大能存储512MB数据
    string类型是二进制安全的 即可以为任何数据 比如数字 图片 序列化对象等

    1. set key value             #设置键值
    2. setex key second value    #设置键值及过期时间,以秒为单位
    3. get key                   #根据键获取值,如果不存在,此键则返回null

    运算
        - 要求: 值是数字
        - incr key  #将key对应的value加1
 

- key的命令

    KEYS pattern       #查找键 参考支持正则
        - keys *       #查询所有的key 匹配任意个字符
        - keys ?       #匹配任意一个字符
        - keys [a-z]   #a或b
        - keys [0-9]
        - keys [a-z],0-9]  #a0
        - keys  ?     #匹配一个
        - keys  *      #匹配多个  

    EXISTS key         #判断键是否存在,如果存在返回1,不存在返回0
    TYPE   key         #查看键对应的value类型
    DEL    key         #删除键及对应的值
    TTL    key         #查看有效时间 以秒为单位
    EXPIRE key  10     #设置key的过期时间 以秒为单位


- hash      #hash 用于存储对象,对象的格式为键值对

    #默认配置文件
    hash-max-ziplist-entries 512  #512字节
    hash-max-ziplist-value   64   #字段数目


    #设置
    HSET    key field value                     #设置单个属性
    HSETNX  key field value                     #字段不存在才设置成功
    HMSET   key field1 value1 field2 value2     #设置多个属性值

    #获取
    HGET    key field           #获取一个属性的值
    HMGET   key field1 field2   #获取多个属性的值
    HGETALL key                 #获取所有属性和值
    HKEYS   key                 #获取所有的属性
    HVALS   key                 #获取所有field对应的值
    HLEN    key                 #返回包含属性的个数
    HEXISTS key  field          #判断这个属性的值是否存在

    #相加
    HINCRBY key field 10            #对属性的值相加  值得是数值类型
    HINCRBYFLOAT key field 10.11    #key做浮点相加,原来key也是浮点

    #删除
    HSEL key field1  field1         #删除




- list

    列表的元素类型为string
    按照插入顺序排序
    在列表的头部或者尾部增加元素

    LPUSH                #在头部插入数据
    LINSERT key BEFBEFORE/AFTER 索引 value  #在一个元素的前后插入新元素


- 发布订阅

    - 发布订阅模式指一种代码的结构 开发的开发方式
    - 有一端完成数据的发布,定制  另一端接收数据

    - 发布者不是计划发送消息给特定的接收者(订阅者),而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅
    - 订阅者对一个或多个频道感兴许,只需要接受感兴趣的消息,不需要知道什么样的发布者发布的
    - 发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑
    - 客户端发到频道的消息,将会被推送到所有订阅此频道的客户端
    - 客户端不需要主动去获取消息,只需要订阅频道,这个频道的内容就会被推送过来

    消息的格式
        - 推送消息的格式包含三部分
        - part1:消息类型,包含三种类型
            - subscribe     表示订阅成功
            - unsubscribe    表示取消订阅成功
            - message        表示其它终端发布消息
         如果第一部分的值为subscribe 则第二部分是频道 第三部分是现在订阅的频道的数量
         如果第一部分的值为unsubscribe  则第二部分是频道 第三部分是订阅的频道的数量 如果为0则表示当前没有订阅任何频道 当在Pub/
                Sub以外状态,客户端可以发出任何redis命令
         如果第一部分的值为message 则第二部分是来源频道的名称 第三部分是消息的内容


    命令
        - SUBSRIBE    频道名称         #订阅
        - UNSUBSRIBE  频道名称         #取消订阅 如果不写参数,表示取消所有订阅
        - PUBLISH      频道           #发布
{
"k1":"ff",
"k2":[1,2,3,5,5,3,2,1],
"k3":{1,2,3,5,6},
"k4":{
    "n1":'pp',
    "n2":"ww"
      },
"k5":{(11,1),('ff',5)},
}

hscan: 增量迭代
hscan_iter: 一个个拿
  - 可是又不能让他频繁链接,一次取比如20条。在该方法中,有调用了 hscan
如果需要链接的话,推荐使用连接池
pool = redis.ConnectionPool(host='', port=6379)
r = redis.Redis(connection_pool = pool)
如果在 django 里面,应该是公用一个链接
  • 但是在 django 里面,它有自己的组件。
pip3 install django-redis
  import django_redis
  conn = django_redis.get_redis_connection()
  

你可能感兴趣的:(redis 安装及使用)