Redis

目录

1 安装

2 配置

3 服务器端和客户端命令

4 数据操作

  4.1 string

  4.2 键命令

  4.3 hash

  4.4 list

  4.5 set

  4.6 zset

5 与Python交互

  5.1 方法

  5.2 string

  5.3 Django

 

 

 

NoSQL:一类新出现的数据库(not only sql),它的特点:

  • 不支持SQL语法

  • 存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV形式

  • NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景

  • NoSQL中的产品种类相当多:

    • Mongodb

    • Redis

    • Hbase hadoop

    • Cassandra hadoop

NoSQL和SQL数据库的比较:

  • 适用场景不同:sql数据库适合用于关系特别复杂的数据查询场景,nosql反之

  • “事务”特性的支持:sql对事务的支持非常完善,而nosql基本不支持事务

  • 两者在不断地取长补短,呈现融合趋势

Redis简介

  • Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

  • Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色

Redis特性

  • Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

redis应用场景

  • 用来做缓存(ehcache/memcached)——redis的所有数据是放在内存中的(内存数据库)

  • 可以在某些特定应用场景下替代传统数据库——比如社交类的应用

  • 在一些大型系统中,巧妙地实现一些特定的功能:session共享、购物车

  • 只要你有丰富的想象力,redis可以用在可以给你无限的惊喜…….

 

1 安装

    • step1:下载

    • step2:解压

      • tar -zxvf redis-3.2.8.tar.gz
    • step3:复制,放到usr/local⽬录下

      • sudo mv ./redis-3.2.8 /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
        • redis-server redis服务器
        • redis-cli redis命令行客户端
        • redis-benchmark redis性能测试工具
        • redis-check-aof AOF文件修复工具
        • redis-check-rdb RDB文件检索工具
    • step9:配置⽂件,移动到/etc/⽬录下

    • 配置⽂件⽬录为/usr/local/redis/redis.conf
      • sudo cp /usr/local/redis/redis.conf /etc/redis/

 

2 配置

 

  • 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

 

3 服务器端和客户端命令

服务器端

  • 服务器端的命令为redis-server

  • 可以使⽤help查看帮助⽂档
    •   
      redis-server --help
  • 推荐使⽤服务的⽅式管理redis服务
  • 启动
    •   
      sudo service redis start
  • 停⽌
    •   
      sudo service redis stop
  • 重启 sudo service redis restart
  • 个人习惯
    •   
      ps -ef|grep redis 查看redis服务器进程
      sudo kill -9 pid 杀死redis服务器
      sudo redis-server /etc/redis/redis.conf 指定加载的配置文件 

客户端

    • 客户端的命令为redis-cli
    • 可以使⽤help查看帮助⽂档
      •   
        redis-cli --help
    • 连接redis

      •   

        redis-cli
    • 运⾏测试命令

      •   

        ping 
    • 切换数据库

    • 数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库

      •   

        select n 

 

4 数据操作

4.1 string

string类型

  • 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。

保存

如果设置的键不存在则为添加,如果设置的键已经存在则修改

  • 设置键值

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

    •   
      setex key seconds value
  • 设置多个键值

    •   
      mset key1 value1 key2 value2 ...
  • 追加值

    •   
      append key value

获取

  • 获取:根据键获取值

    •   
      get key
  • 根据多个键获取多个值

    •   
      mget key1 key2 ...

4.2 键命令

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

    •   
      keys pattern   例1:查看所有键 : keys *       例2:查看名称中包含a的键: keys 'a*'
  • 判断键是否存在,如果存在返回1,不存在返回0

    •   
      exists key1
  • 查看键对应的value的类型

    •   
      type key
  • 删除键及对应的值

    •   
      del key1 key2 ...
  • 设置过期时间,以秒为单位

  • 如果没有指定过期时间则⼀直存在,直到使⽤DEL移除

    •   
      expire key seconds
  • 查看有效时间,以秒为单位

    •   
      ttl key

 

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

4.4 list类型

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

增加

  • 在左侧插⼊数据

    •   
      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

4.5 set类型

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

增加

  • 添加元素

    •   
      sadd key member1 member2 ...

获取

  • 返回所有的元素

    •   
      smembers key

删除

  • 删除指定元素

    •   
      srem key

4.6 zset类型

  • sorted set,有序集合

  • 元素为string类型

  • 元素具有唯⼀性,不重复

  • 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序

  • 说明:没有修改操作

增加

  • 添加

    •   
      zadd key score1 member1 score2 member2 ...

获取

  • 返回指定范围内的元素

  • start、stop为元素的下标索引

  • 索引从左侧开始,第⼀个元素为0

  • 索引可以是负数,表示从尾部开始计数,如-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

 

5 与Python交互

5.1 方法

StrictRedis对象⽅法

  • 通过init创建对象,指定参数host、port与指定的服务器和端⼝连接,host默认为localhost,port默认为6379,db默认为0
sr = StrictRedis(host='localhost', port=6379, db=0)

简写
sr=StrictRedis()
  • 根据不同的类型,拥有不同的实例⽅法可以调⽤,与前⾯学的redis命令对应,⽅法需要的参数与命令的参数⼀致

string

  • set

  • setex

  • mset

  • append

  • get

  • mget

  • key

keys

  • exists

  • type

  • delete

  • expire

  • getrange

  • ttl

hash

  • hset

  • hmset

  • hkeys

  • hget

  • hmget

  • hvals

  • hdel

list

  • lpush

  • rpush

  • linsert

  • lrange

  • lset

  • lrem

set

  • sadd

  • smembers

  • srem

zset

  • zadd

  • zrange

  • zrangebyscore

  • zscore

  • zrem

  • zremrangebyscore

5.2 string

  • 在桌面上创建redis目录
  • 使用pycharm打开 redis目录
  • 创建redis_string.py文件
from redis import *
if __name__=="__main__":
    try:
        #创建StrictRedis对象,与redis服务器建⽴连接
        sr=StrictRedis()

    except Exception as e:
        print(e)
View Code

string-增加

  • ⽅法set,添加键、值,如果添加成功则返回True,如果添加失败则返回False
  • 编写代码如下
from redis import *
if __name__=="__main__":
    try:
        #创建StrictRedis对象,与redis服务器建⽴连接
        sr=StrictRedis()
        #添加键name,值为zorro    
        result=sr.set('name','zorro')
        #输出响应结果,如果添加成功则返回True,否则返回False
        print(result)
    except Exception as e:
        print(e)
View Code

string-获取

  • ⽅法get,添加键对应的值,如果键存在则返回对应的值,如果键不存在则返回None
  • 编写代码如下
from redis import *
if __name__=="__main__":
    try:
        #创建StrictRedis对象,与redis服务器建⽴连接
        sr=StrictRedis()
        #获取键name的值
        result = sr.get('name')
        #输出键的值,如果键不存在则返回None
        print(result)
    except Exception as e:
        print(e)
View Code

string-修改

  • ⽅法set,如果键已经存在则进⾏修改,如果键不存在则进⾏添加
  • 编写代码如下
from redis import *
if __name__=="__main__":
    try:
        #创建StrictRedis对象,与redis服务器建⽴连接
        sr=StrictRedis()
        #设置键name的值,如果键已经存在则进⾏修改,如果键不存在则进⾏添加
        result = sr.set('name','luffy')
        #输出响应结果,如果操作成功则返回True,否则返回False
        print(result)
    except Exception as e:
        print(e)
View Code

string-删除

  • ⽅法delete,删除键及对应的值,如果删除成功则返回受影响的键数,否则则返 回0
  • 编写代码如下
from redis import *
if __name__=="__main__":
    try:
        #创建StrictRedis对象,与redis服务器建⽴连接
        sr=StrictRedis()
        #设置键name的值,如果键已经存在则进⾏修改,如果键不存在则进⾏添加
        result = sr.delete('name')
        #输出响应结果,如果删除成功则返回受影响的键数,否则则返回0
        print(result)
    except Exception as e:
        print(e)
View Code

获取键

  • ⽅法keys,根据正则表达式获取键
  • 编写代码如下
from redis import *
if __name__=="__main__":
    try:
        #创建StrictRedis对象,与redis服务器建⽴连接
        sr=StrictRedis()
        #获取所有的键
        result=sr.keys()
        #输出响应结果,所有的键构成⼀个列表,如果没有键则返回空列表
        print(result)
    except Exception as e:
        print(e)
View Code

 

5.3 Django

session的redis存储配置

  • 安装包

    •   

      pip install django-redis-sessions
  • 修改settings文件,增加如下项

    •   
      SESSION_ENGINE = 'redis_sessions.session'
      SESSION_REDIS_HOST = 'localhost'
      SESSION_REDIS_PORT = 6379
      SESSION_REDIS_DB = 2
      SESSION_REDIS_PASSWORD = ''
      SESSION_REDIS_PREFIX = 'session'

测试

  • 打开booktest/views.py文件,创建session_set和session_get视图如下
  def session_set(request):
      request.session['name']='luffy'
      return HttpResponse('ok')


  def session_get(request):
      name=request.session['name']
      return HttpResponse(name)
View Code
  • 打开booktest/urls.py文件,配置url如下
  url(r'^session_set/$',views.session_set),
  url(r'^session_get/$', views.session_get),
View Code

 

posted @ 2019-04-12 16:18  F.or,T  阅读(266)  评论(0编辑  收藏  举报