• redis入门


    Redis数据库

    1.NoSQL数据库

    1.1 什么是NoSQL数据库

    • not only sql:不仅是sql
    • 非关系型数据库。

    1.2 NoSQL的特性

    • 不支持SQL语法
    • 没有像关系型数据库一样的通用语法
    • 每种NoSQL数据库都有自己的api和语法,都有擅长的业务场景。

    1.3 NoSQL与SQL数据库的比较

    • 适用场景的不同:nosql数据库适合用于关系特别负责的场景;而sql适用于关系相对简单的场景。
    • 事务:一组SQL语句操作,要么都成功,要么都失败。
    • 事务的支持:sql对事务支持十分完善,NoSQL基本不支持事务。

    2.Redis数据库

    2.1 什么是Redis

    • NoSQL家庭中的一员,属于非关系型数据库。
    • C语言编写、支持网络、可基于内存、可持久化日志型数据库。

    2.2 Redis有什么特性

    • KEY-VALUE形式存储数据。
    • 支持数据的可持久化,可以将内存中的数据保存在磁盘,重启时候可以再次进行加载使用。
    • 除了KEY-VALUE形式存储外,同时还提供listsetzsethash等数据结构存储数据。
    • 支持数据的备份,使用master-slave模式备份数据。

    2.3 Redis有什么优势

    • 性能高:读写速度快
    • 丰富数据类型
    • 原子性:避免资源争夺
    • 丰富特性:通知、key过期、publish/subscribe

    2.4 Redis用在哪

    • 做缓存,Redis的所有数据存放在内存中(内存数据库)
    • 适合于社交类的应用场景
    • 大型项目中的特定场景

    3.Redis的安装与配置

    3.1 Redis安装

    • 以下操作基于UBUNTU系统,到官网下载redis最新稳定版本

    • 开始安装操作

      tar -zxvf redis-版本号.tar.gz # 解压
      sudo mv ./redis-版本号 /usr/local/redis/
      cd /usr/local/redis/ # 切换到redis目录
      sudo make # 开始生成
      sudo make test # 测试
      sudo make install # 安装,将redis的命令安装到/usr/local/bin/⽬录
      cd /usr/local/bin #安装完成后,我们进入目录/usr/local/bin中查看
      
    • 执行sudo make test可能报错

      hadoop@stormspark:~/workspace/redis2.6.13/src$ make test
      You need tcl 8.5 or newer in order to run the Redis test
      make: *** [test] Error 1
      
    • 解决方法

      wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz  
      sudo tar xzvf tcl8.6.1-src.tar.gz  -C /usr/local/  
      cd  /usr/local/tcl8.6.1/unix/  
      sudo ./configure  
      sudo make  
      sudo make install 
      

    3.2 配置

    • Redis的配置信息在/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

    • 在配置时,有些许文件夹需要我们手动创建。

    3.3 启动服务端和客户端

    • 服务端启动与关闭

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

      redis-cli # 启动服务端
      redis-cli --help # 查看客户端帮助
      ping # 测试客户端与服务端的链接(链接成功返回pong)
      SELECT INDEX # 切换数据库 默认16个 索引为0-15
      

    4.数据类型以及操作

    4.1 string类型

    • 字符串类型是Redis中最基础的数据存储类型
    • Redis中是二进制安全的,这便意味着类型可以接受任何格式的数据(图片数据/json等)
    • 值最多可以容纳数据长度是512M

    4.2 string操作

    • 设置键值(设置的键不存在则为添加,存在则修改)

      set key value
      
    • 根据键查询值

      get key
      
    • 设置过期时间

      setex key seconds value
      
    • 设置多个键值

      mset key1 value1 key2 value2
      
    • 查询多个值

      mget key1 key2
      
    • 在值基础追加数据

      append key value
      

    4.3 键命令

    • 查找键,参数支持正则表达式

      keys pattern

    • 判断键是否存在,存在返回1,不存在返回0

      exists key1

    • 查看对应值得类型

      type key1

    • 删除对应的值

      del key1 key2

    • 删除键

      del key1 key2

    • 如果没有指定过期时间则,一直存在,直到使用del删除

    • 给没有设置过期时间的key加上过期时间

      expire key1 seconds

    • 查看时效,以秒为单位

      ttl key

    4.4 hash类型

    • 用于存储对象,对象的结构为属性值
    • 值得类型为string

    4.5 hash操作

    • 设置单个属性

      hset key file value

    • 设置多个属性

      hmset key file value key1 file1 value1

    • 获取指定键所有的属性

      hkeys key

    • 获取一个属性的值

      hget key filed

    • 获取多个属性的值

      hmget key file1 file2

    • 获取所有属性的值

      hvals key

    • 删除属性

      hdel key1 file1 file2

    4.5 list类型

    • 列表的元素类型为string
    • 按照插入顺序排序

    4.6 list操作

    • 往左侧插入数据

      lpush key value1 value2

    • 往右侧插入数据

      rpush key value1 value2

    • 在指定元素的前或后插入新元素

      linsert key before|after 现有元素 新元素

    • 返回指定范围的元素

      • start、stop为元素的下标索引
      • 索引从左侧开始,第一个元素为0
      • 索引可以是负数,表示从尾部开始计数

      lrange key start stop # 包含下标

      lrange key 0 -1 # 列出所有的元素

    • 设置指定索引位置的值

      lset key index value

    • 删除指定元素

      • 将列表中前count次出现的值为value的元素移除
      • count >0: 从头到尾移除
      • count<0: 从尾到头移除
      • count=0: 移除所有

      lrem key count value

    4.7 set类型

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

    4.8 set操作

    • 添加元素

      sadd key member1 member2

    • 获取所有的元素

      smembers key

    • 删除指定元素

      srem key value1 value2

    4.9 zset类型

    • sorted set,有序集合
    • 元素为string类型
    • 元素具有唯一性,不重复
    • 每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序
    • 说明:没有修改操作

    4.10 zset操作

    • 添加

      zadd key socre1 member1 score2 member2 ...

    • 获取元素

      • 返回指定范围内的元素
      • 索引从左侧开始第一个为0;索引为负数,表示从尾部开始计数。
      • start、stop为元素的下标索引

      zrange key start stop

    • 返回socre值在min和max之间的成员

      zrangebyscore key min max

    • 返回成员member的score值

      zscore key member

    • 删除指定元素

      zrem key member1 member2

    • 删除权重在指定范围的元素

      zremrangebyscore key min max

    5.python与Redis进行交互

    5.1 在python中安装Redis库

    5.2 调用模块

    • 引入模块

      from redis import * # 导入redis库
      
    • 这个模块中提供StrictRedis对象(Strict严格),用于连接redis服务器,并按照不同类型提供了不同方法,进行交互操作

    5.3 StrictRedis对象方法

    • 使用对象的init方法创建对象,指定参数host、post与指定的服务器和端口进行连接。
      • host默认值localhost
      • port默认值6379
      • db默认值0
    sr = StrictRedis(host='localhost', port=6379, db=0)
    # 简写
    sr =StrictRedis()
    
    • 根据不同类型,拥有不同的实例方法。(详细参考前面数据类型的操作)
    from redis import *
    
    if __name__ == '__main__':
        # 创建一个StrictRedis对象,连接数据库
        try:
            sr = StrictRedis()
            # 添加一个key:value name:raolong
            res = sr.set('name','raolong')
            # 返回一个布尔值表示是否存储成功
            print(res)
            # 获取name的值
            name = sr.get('name') # 如果取不到值返回none
            # 修改值
            sr.set('name', 'renwoxing')
            # 删除多个键值
            sr.delete('name')
            # 获取数据库中所有的键
            sr.keys() # 返回一个列表
            
        except Exception as e:
            print(e)
    

    5.4 django存储session(使用redis)

    • 安装包

      pip install django-redis-sessions==0.5.6

    • 到django项目中settings.py修改配置

      # 设置redis存储session信息
      SESSION_ENGINE = 'redis_sessions.session'
      # redis服务的ip地址
      SESSION_REDIS_HOST = 'localhost'
      # redis服务的端口号
      SESSION_REDIS_PORT = 6379
      # redis中的那个数据库
      SESSION_REDIS_DB = 2
      # 连接redis的密码
      SESSION_REDIS_PASSWORD = ''
      # 前缀:唯一标识码
      SESSION_REDIS_PREFIX = 'session'
      
    • 到应用views.py中创建视图函数

      def set_session(request):
          request.session['username'] = 'smart'
          request.session['age'] = 18
          
          return HttpResponse('设置session')
      
      def get_session(request):
          username = request.session['username']
          age = request.session['age']
          
          return HttpResponse(username + ':' + age)
      
    • 到应用urls.py中配置路由

      url(r'^set_session/$', views.set_session)
      url(r'^get_session/$', views.get_session)
      
    • 我们可以在redis客户端查看

      # 切换到指定数据库
      select 2
      # 查看所有键
      keys *
      
  • 相关阅读:
    2019-2020-20191201《信息安全专业导论》第4周学习总结
    2019-2020-20191201《信息安全专业导论》第3周学习总结
    2019-2020-191201《信息安全专业导论》第二周学习总结
    计算机概论速读提问
    自我介绍
    20191302第六章学习笔记
    20191302反汇编测试
    20191302mystat
    20191302 第五章学习
    20191302 第四章学习笔记
  • 原文地址:https://www.cnblogs.com/raoqinglong/p/13061243.html
Copyright © 2020-2023  润新知