Redis数据库(一)

时间:2021-07-05 05:52:36

安装并配置环境变量 redis后登录:redis-cli.exe -h 127.0.0.1 -p 6379

或者登录: redis-cli

nosql介绍

NoSQL:一类新出现的数据库(not only sql),它的特点:
    不支持SQL语法
    存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV(键值对)形式
    NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景
    
NoSQL中的产品种类相当多:
    Mongodb
    Redis
    Hbase hadoop
    Cassandra hadoop

理解关系型数据库 与 非关系型数据库区别和应用

适用场景不同:sql数据库适合用于关系特别复杂的数据查询场景,nosql反之
“事务”特性的支持:sql对事务的支持非常完善,而nosql基本不支持事务
两者在不断地取长补短,呈现融合趋势

Redis简介

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

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可以用在可以给你无限的惊喜…….

切换数据库

数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库。
select index # 切换数据库

Redis数据结构

redis是key-value的数据结构,每条数据都是?个键值对
键的类型是字符串
注意:键不能重复
值的类型分为五种:
    字符串string
    哈希hash
    列表list
    集合set
    有序集合zset

Redis数据库(一)

Redis数据操作行为

保存 修改 获取 删除

string 类型

字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
----------------------------------------------------------------------
--设置键值
--set key value
  set school just
  
--设置键值及过期时间,以秒为单位
--setex key seconds values
  setex aa 10 hello
   
--设置多个键值
--mset key1 value1 key2 value2...
  mset a1 python a2 c   a3 java

--追加值
--append key value
  append a2 "figure" --向键为a2中追加值为"figure"

-------------------------------------------------------------------------------------------获取:根据键获取值,如果不存在则此键返回为nil
--get key
  get school
 
--一次获取多个键的值
--mget key1 key2 key3
  mget a1 a2 a3
 
--删除del 
--del key
  del school

键命令

查找键,参数支持正则表达式
--keys pattern
  keys * 查看所有键
  keys 'a*' 查看名称中包含a的键
  
判断键是否存在,若存在返回1,不存在返回0
--exists key1 
  exists a1 --判断a1是否存在
  
查看键对应的value的类型
--type key
  type a1 --查看键a1的值类型,为redis支持的五种类型中的一种
  
 删除键及对应值
--del key1 key2
  del a2 a3
  
 设置过期时间,以秒为单位;如果没有指定过期时间则一直存在,直到使用del移除
 expire key seconds
 expire a1 10
 
 查看有效时间,以秒为单位
 --ttl key
  ttl bb --查看键'bb'的有效时间

hash类型

hash用于存储对象,对象的结构为属性、值
值的类型为string
-----------------------------------------------------------------------------------------
--设置单个属性
--hset key field value
  hset user name Tom 

--设置多个属性
--hmset key field1 values field2 values2 ...(hmset --> hash many set)
  hmset address China shanghai American Newyork Janpan Tokyou
  hmset user name xwj age 22 school AnhuiUniversity
  
--获取一个属性的值
--hget key field
--hget user name

--获取指定键多个属性的值
--hmget key field1 field2
  hmget address China American Janpan -- 获取键address属性 China American Janpan 

--获取所有属性的值
--hvals keys
  hvals address
  
--删除hash键和值,使用del命令;删除属性,属性对应的值会被一起删除。
--hdel key field field
  hdel address Janpan --删除键 address 的属性Janpan;  
--类型
  type key
  
--显示所有键
  keys *

list类型

列表的元素类型为string
按照插入顺序排列
----------------------------------------------------------------------------------
增加操作
----------------------------------------------------------------------------------
在左侧插入数据
--lpush key value1 value2
  lpush a1 a b c --从键为'a1'的列表左侧加?数据a 、 b 、c

在右侧插入数据
--rpush key values1 values2 
  rpush a1 0 1
  
--在指定元素的前或后插入新的元素
--linsert key berfore 或 after 现有元素 新元素
  linsert a1 before b 3 --在键为“a1”的列表中的元素'b'前加入"3"
  
--获取:返回列表里指定范围内的元素
--start、stop为元素的下标索引
--索引从左侧开始、第一个元素为0
--索引可以是负数,表示从尾数开始计数,如-1表示最后一个元素
--lrange key start stop
  lrange a1 0 -1  --获取键"a1"的列表所有元素
  
--设置指定元素索引位置的元素值
--索引从左侧开始,第一个元素为0
--索引可以是负数,表示尾部开始计数,如-1表示最后一个元素
--lset key index value
  lset a 1 z --修改键为"a1"的列表中下标为1的元素值为"z"

--删除指定元素
将列表中前count次出现的值为value的元素移除
count > 0: 从头往尾移除(从左——>右)
count < 0: 从尾往头移除(从右——左)
count = 0: 移除所有

lpush a2 a b a b a b --向列表'a2'中加?元素'a'、'b'、'a'、'b'、'a'、'b'
从'a2'列表右侧开始删除2个'b'
lrem a2 -2 b  --lrem(left remove) 从"a2"列表右侧开始删除2个"b"

set类型

set类型
无序集合
元素为string类型
元素具有唯?性,不重复
说明:对于集合没有修改操作
----------------------------------------------------------------------------------
添加元素
--sadd key member1 member2
  sadd language java python c   --(sadd = set add)
获取
--返回所有的元素
--smembers key
  smembers language  --(smember set member)
   
 --删除指定元素(成员)
 --srem key member 
   srem language c   --删除language成员的c  

zset类型

sorted set,有序集合
元素为string类型
元素具有唯?性,不重复
每个元素都会关联?个double类型的score,表示权重,通过权重将元素从?到?排序。
说明:没有修改操作
----------------------------------------------------------------------
增加:
zadd key score1 member1 score2 member2...
zadd name 4 Chencao 5 wangwu 6 zhaoliu 3 zhangsan 

获取:
    返回指定范围内的元素
    start、stop为元素的下标索引
    索引从左侧开始,第?个元素为0
    索引可以是负数,表示从尾部开始计数,如-1表示最后?个元素
    -- zrange key start stop 
    zrange name 0 -1 -- 获取键"a4“集合中所有元素
    
    返回score值在min和max之间的成员
    --zrangebyscore key min max
      zrangebyscore names 3 7 --返回权重为3-7之间的所有成员
      
    --返回成员member的score值
      zscore key member
     
删除
    删除指定元素
  --zrem key member1 member2...
    zrem names zhangshan --删除集合“names”中的元素"zhangsan"
    
    删除权重在指定范围的元素:
    zremrangebyscore key min max
    zremrangebyscore names 5 7  --删除集合"names"中的权限在5,7之间的元素
    

Ridis与python交互

打开Pycharm,联网安装redis
调用模块:
    from redis import *
   这个模块中提供了StrictRedis对象(Strict严格)用于连接redis服务器,并按照不同类型提供了不同方法,进行交互操作。

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

连接Redis服务器

from redis import *
if __name__ == "__main__":
    try:
        #创建StrictRedis对象,与redis服务器建立链接
        sr = StrictRedis()
    except Exception as e:
        print(e)

String -操作

from redis import *
if __name__ =="__main__":
    try:
        #创建StrictRedis对象,与redis服务器建立链接
        sr = StrictRedis()
        res = sr.set("name","普京") #添加键name,值为"普京"
        print("增加操作",res) # 输出响应结果,如果添加成功则返回True,否则返回False

        res1 = sr.get("name") #获取键name的值
        print("获取操作",res1) #输出键的值,如果键不存在则返回None

        res2 = sr.set("name","上海")
        print("更改操作",res2) # 输出响应结果,如果操作成功则返回True,否则返回False

        res3 = sr.keys()
        print("获取所有键操作",res3) # 获取所有键,输出响应结果,所有的键构成一个列表,如果没有则返回空列表

        res4 = sr.delete("name")
        print("删除操作",res4) #输出响应结果,如果删除成功则返回受影响的键数,否则返回0。

    except Exception as e:
        print(e)

主从