• redis手册


    Redis 基础+应用

    • redis 是什么

    • 安装redis

    • redis 数据类型

    • redis应用有哪些

    • python操作redis

     

    redis 是什么

    NoSQL 非关系型数据库 数据保存在内存中 速度超快

    速度比mysql快

    只有key value

    八种数据类型 常用的有五种数据类型

    key最大支持 512M

    0-15 16个库

    默认端口号 6379

    • 缓存 因为多个请求要访问mysql 这个时候 mysql 可以将结果存储在 redis中

    • 新浪微博

      • 你关注了谁 谁关注了你 你们的共同好友

      • 你关注的人 关注了谁 系统会给你推荐这些人

      • 时间线

     

    安装redis

    www.redis.cn  下载  

    linux 版:
    wget -c http://download.redis.io/releases/redis-5.0.5.tar.gz


    tar -zxvf redis-5.0.5.tar.gz

    sudo mv redis-5.0.5 /usr/local/redis
    cd /usr/local/redis
    make install  




    windows 版:

    拷贝 ..../redis edis-windows-mastersrcmsopentech 下面的目录到 c盘指定的目录

    windows+r   cmd

    切换到redis-server.exe所在的目录
    编辑 redis.windows.conf  
    修改 maxmemory 将其改为201915200 (单位是字节)保存  

    启动:redis-server.exe redis.windows.conf #窗口一直开着 ctrl+c 停止
    默认端口号 6379  
    可视化工具连接 即可  

    后台启动  
    将redis-server.exe --service-install redis.windows.conf #将其安装到windows系统服务中  

    #在命令行中搜索 service 即可打开服务 能看到redis

     

    /usr/local/redis/src

    aof rdb 定期从内存中 同步到磁盘中 实现数据的持久化

    文件名说明
    redis-server redis服务器启动脚本
    redis-cli redis客户端脚本
    redis-sentinel 哨兵服务器 redis2.0之后才有的
    redis-check-aof aof修复工具
    redis-check-rdb rdb修复工具
    redis-benchmark redis性能测试工具

     

    linux redis启动

    /usr/local/redis/src/redis-server #不能关闭窗口  

    #后台启动步骤  
    cd /usr/local/redis
    sudo vim redis.conf  
    daemonize yes #将no改为 yes 保存

    /usr/local/redis/src/redis-server redis.conf

    # redis-cli 不需要切换目录 直接写就可以
    mxl@mxl-virtual-machine:~$ redis-cli -h ip地址 -p 端口号
    127.0.0.1:6379> ping
    PONG   #出现PONG 说明成功
    127.0.0.1:6379>


    #设置密码
    127.0.0.1:6379> config set requirepass '123456'
    OK
    127.0.0.1:6379> keys *
    (error) NOAUTH Authentication required.
    127.0.0.1:6379> auth 123456
    OK
    127.0.0.1:6379> keys *
    (empty list or set)
    127.0.0.1:6379>
    设置密码 还可以 sudo vim /usr/local/redis/redis.conf
      第507行
      requirepass 你的密码

    Redis数据类型

    不止五种 常用的 有五种数据类型

    • string 最基本的类型

    • hash 缓存常用

    • list 列表

    • set 无序集合

    • zset 有序集合

     

    string

    key value 最基本的数据类型 键值对

    set key value值 

    127.0.0.1:6379> set name kangbazi
    OK

    get key #根据key 获取指定的value值

    del key #删除指定的key value值也会被删除

    type key #查看key的类型  
    ---------------------------------------------------------------------------
    127.0.0.1:6379> config set requirepass 123456
    OK
    127.0.0.1:6379> keys *
    (error) NOAUTH Authentication required.
    127.0.0.1:6379> auth 123456
    OK
    127.0.0.1:6379> set name kangbazi
    OK
    127.0.0.1:6379> get name
    "kangbazi"
    127.0.0.1:6379> type name
    string
    ---------------------------------------------------------------------------

    mset key1 value1 keyn valuen #支持同时设置多个键值对
    mget key1 keyn #支持同时取出来


    ---------------------------------------------------------------------------
    127.0.0.1:6379> mset name kangbazi name1 kangbazi1 name2 kangbazi2 name3 kangbazi3
    OK
    127.0.0.1:6379> mget name name1 name2 name3
    1) "kangbazi"
    2) "kangbazi1"
    3) "kangbazi2"
    4) "kangbazi3"
    ---------------------------------------------------------------------------

    incr key #key对应的value 累加1

    127.0.0.1:6379> set num 1
    OK
    127.0.0.1:6379> incr num
    (integer) 2
    127.0.0.1:6379> get num
    "2"
    127.0.0.1:6379> incrby num 100 #指定key的value 增加指定的值
    (integer) 102
    127.0.0.1:6379> get num
    "102"
    127.0.0.1:6379> incrbyfloat num 12.34 #指定key的value 增加指定的float类型的值
    "64.34"
    127.0.0.1:6379> get num
    "64.34"
    127.0.0.1:6379> setex name 10 kangbazi  #往redis存的过程中直接设置过期时间
    OK





    decr key #key对应的value 累减1
    127.0.0.1:6379> decr num
    (integer) 2
    127.0.0.1:6379> get num
    "2"
    127.0.0.1:6379> decrby num 50 # 指定key的value 递减指定的值  
    (integer) 52
    127.0.0.1:6379> get num
    "52"


    strlen key # 查看制定key对应的value值得长度  
    127.0.0.1:6379> set name kangbazi
    OK
    127.0.0.1:6379> strlen name
    (integer) 8
    127.0.0.1:6379> APPEND name boy #往指定key对应的value值后面增加字符串 返回的是增加后字符串的长度
    (integer) 11

    ttl key #查看 key 在内存中剩余的时间   -1表示永不过期  

    127.0.0.1:6379> expire key 秒数 #指定指定key 在内存中的过期时间 秒为单位
    (integer) 1
    127.0.0.1:6379> ttl name
    (integer) 5

    基础操作

    redis有16个库  0-15号 

    select  1 #切换到1号库 默认0号库
    keys * #列出当前库中所有的key
    keys n* #查看以n字母开头的key
    127.0.0.1:6379> dbsize #查看库的大小
    (integer) 4 #里边有4个key
    flushdb #清空当前库中所有的key
    flushall #清空所有库中的key

     

    hash 就是键值对的集合 特别适合存放对象

    每个hash 能够存放2的32次方-1个键值对

    id name age height

    1 dada 18 181cm

    开发过程中 给mysql缓存常用的类型就是hash 一张数据表 就是一个hash

    127.0.0.1:6379> hset user name shuliu age 18 height 181cm
    (integer) 3
    127.0.0.1:6379> hset user1 name yinli age 19 height 185cm
    (integer) 3
    127.0.0.1:6379> hget user name
    "shuliu"
    127.0.0.1:6379> hget user age
    "18"
    127.0.0.1:6379> hget user height
    "181cm"

    hget user name age height #不能实现 可以通过 hmget hmget 必须是 hmset设置进去的  

    127.0.0.1:6379> hvals user1  #取出指定key 对应的 属性的值
    1) "yinli"
    2) "19"
    3) "185cm"
    127.0.0.1:6379> hkeys user1  ##取出指定key 对应的 属性名称
    1) "name"
    2) "age"
    3) "height"

    127.0.0.1:6379> hgetall user1 #取出指定key对应的属性的名称及属性的值
    1) "name"
    2) "yinli"
    3) "age"
    4) "19"
    5) "height"
    6) "185cm"


    127.0.0.1:6379> hmset language python num1 java num2 c num3 #同hset 批量设置多个键值
    OK
    127.0.0.1:6379> hmget language python java c  #hget 不能实现多个获取  
    1) "num1"
    2) "num2"
    3) "num3"

    127.0.0.1:6379> hlen language  #查看制定的key 里边有多少个键值对  
    (integer) 3



    127.0.0.1:6379> hexists language javascript #查看指定的key中是否存在指定的属性 存在返回1 不存在返回0
    (integer) 0
    127.0.0.1:6379> hexists language java  #存在 返回1
    (integer) 1
    127.0.0.1:6379> hexists language python
    (integer) 1

    127.0.0.1:6379> hdel language java  #删除指定key中指定的属性  
    (integer) 1
    127.0.0.1:6379> hexists language java #被删除了 返回0
    (integer) 0

    127.0.0.1:6379> hmset username name kangbazi666  #查看指定key中属性 对应的value值得长度
    OK
    127.0.0.1:6379> hstrlen username name
    (integer) 11

     

    list 列表

    按照顺序从开头或者结尾插入

    l left lpush 从左侧也就是开头插入元素 js中的队列方法 unshift shift 先进先出

    r right rpush 从右侧 也就是结尾插入元素 js中的栈方法 push pop 先进后出

     

    127.0.0.1:6379> lpush sql mysql
    (integer) 1
    127.0.0.1:6379> lpush sql redis
    (integer) 2
    127.0.0.1:6379> lpush sql mongodb
    (integer) 3
    127.0.0.1:6379> rpush sql sqlserver
    (integer) 4
    127.0.0.1:6379> rpush sql oracle
    (integer) 5
    127.0.0.1:6379> rpush sql rabbitmq
    (integer) 6
    127.0.0.1:6379> lrange sql 0 6  #开始的位置 结束的位置
    1) "mongodb"
    2) "redis"
    3) "mysql"
    4) "sqlserver"
    5) "oracle"
    6) "rabbitmq"



    127.0.0.1:6379> lpop sql #移除左侧第一个元素
    "mongodb"
    127.0.0.1:6379> lrange sql 0 6  #开始的位置 结束位置 下标 redis下标从0开始
    1) "redis"
    2) "mysql"
    3) "sqlserver"
    4) "oracle"
    5) "rabbitmq"

    127.0.0.1:6379> rpop sql #移除右侧第一个元素
    "rabbitmq"
    127.0.0.1:6379> lrange sql 0 6  
    1) "redis"
    2) "mysql"
    3) "sqlserver"
    4) "oracle"

    127.0.0.1:6379> lindex sql 0  #根据索引查看制定key的元素
    "redis"
    127.0.0.1:6379> lindex sql 1
    "mysql"
    127.0.0.1:6379> lindex sql 1
    "mysql"
    127.0.0.1:6379> lindex sql 2
    "sqlserver"
    127.0.0.1:6379> lindex sql 3
    "oracle"

    127.0.0.1:6379> llen sql #查看制定key的列表有多少个元素
    (integer) 4

    lset key 索引值 元素
    127.0.0.1:6379> lset sql 3 mysql
    OK

    #原来 索引为3的元素 就被mysql覆盖了 原来的mysql还在

     

    set 无序集合

    元素唯一性

    127.0.0.1:6379> sadd redis one two three
    (integer) 3  #表名三个都已经存进去了
    127.0.0.1:6379> SMEMBERS redis #取出所有的元素
    1) "three"
    2) "one"
    3) "two"
    127.0.0.1:6379> sadd redis one two three #因为已经存在 所以返回0
    (integer) 0

    127.0.0.1:6379> sadd mysql one two three four five
    (integer) 5
    127.0.0.1:6379> SDIFF redis mysql  #求差集  
    #谁在前面结果不一样 我有的你有那么返回空 我有的你没有 返回我有的
    (empty list or set)
    127.0.0.1:6379> SDIFF mysql redis
    1) "five"
    2) "four"

    127.0.0.1:6379> SINTER redis mysql  #求交集 顺序无所谓
    1) "three"
    2) "one"
    3) "two"


    127.0.0.1:6379> sunion mysql redis #合集  
    1) "one"
    2) "five"
    3) "four"
    4) "three"
    5) "two"

    127.0.0.1:6379> sismember mysql four #4是否是mysql中的元素 是返回1 否返回0
    (integer) 1
    127.0.0.1:6379> sismember mysql six
    (integer) 0

     

    zset 有序集合

    元素唯一性

    分数值可以重复

    秒杀

    zadd key score member
    127.0.0.1:6379> zadd z1 0 zero
    (integer) 1
    127.0.0.1:6379> zadd z1 1 one
    (integer) 1
    127.0.0.1:6379> zadd z1 2 two
    (integer) 1

    127.0.0.1:6379> zrange z1 0 2 #类似于list 中的 lrange
    1) "zero"
    2) "one"
    3) "two"


    127.0.0.1:6379> ZRANGEBYSCORE z1 0 1
    1) "zero"
    2) "one"


    127.0.0.1:6379> zadd z1 1 mysql #分数值可以重复
    (integer) 1
    127.0.0.1:6379> zadd z1 1 redis
    (integer) 1
    127.0.0.1:6379> zadd z1 1 kangbazi
    (integer) 1
    127.0.0.1:6379> zadd z1 1 redis  #元素不能重复 重复则返回0
    (integer) 0


    127.0.0.1:6379> zcount z1 1 1   #最小分数值 最大分数值   分数值区间对应的元素数量
    (integer) 4 #分数为1 的元素有4个


    127.0.0.1:6379> zscore z1 mysql #查看 指定key z1 对应的权重
    "1"
    127.0.0.1:6379> zcard z1  #指定key下面有多少个元素  
    (integer) 6

     

    redis 事务

    事务就是一个操作

    • 原子性 要么全部执行 要么全部不执行

    • 隔离性 一个操作进行中 不能被其它操作打扰 按顺序进行

    #开启事务 
    127.0.0.1:6379> multi  #开启事务
    
    
    127.0.0.1:6379> set name kangbazi
    QUEUED
    127.0.0.1:6379> set test test
    QUEUED
    127.0.0.1:6379> set qfedu qdedu
    QUEUED
    
    127.0.0.1:6379> exec   #执行事务 里边的命令顺序执行 
    1) OK
    2) OK
    3) OK
    
    
    
    127.0.0.1:6379> discard  #取消事务 
    
    127.0.0.1:6379> watch mxl #监视指定的key  如果执行事务之前 key被修改  那么事务会被中断 
    
    unwatch 取消监控  
    

    发布和订阅

    a窗口:  订阅
    	redis-cli -h 127.0.0.1 -p 6379
    	subscribe 频道名称  
    	这里就可以看到 b窗口发不来的消息
    	
    b窗口  发布
    	redis-cli -h 127.0.0.1 -p 6379
    	publish 频道名称 信息
    

     

    Python操作redis

    git clone https://github.com/andymccurdy/redis-py.git cd redis-py/ python setup.py install

    import redis 
    r = redis.StrictRedis(host='127.0.0.1',port=6379,db=0,password='123456') 
    #如果打印出来的结果是 b'内容' 说明是bytes类型  如果想转化成 str 
    #需要加参数 decode_responses=True
    
    r.set('name','kangbazi')
    print(r.get('name'))
    

     

    设置过期时间

    import redis 
    res = redis.StrictRedis(host='127.0.0.1',port=6379,db=0,password='123456')
    
    res.set('username','kangbazi666',ex=30)
    print(res.get('username'))
    

     

    操作redis list类型

    import redis 
    relist = redis.StrictRedis(host='127.0.0.1',port=6379,db=0,password='123456')
    relist.lpush('language','python')
    relist.lpush('language','linux')
    relist.rpush('language','javascript')
    
    print(relist.lrange('language',0,-1))
    

     

    操作redis hash类型

    import redis 
    rehashs = redis.StrictRedis(host='127.0.0.1',port=6379,db=0,password='123456')
    rehashs.hset('website','qfedu','qfedu.com')
    rehashs.hset('website','91','91.com')
    rehashs.hmset('users',{'username':'kangbazi','password':'66666'})
    print(rehashs.hgetall('website')) #属性和值
    print(rehashs.hkeys('website')) #只取属性
    
    print(rehashs.hvals('website'))#只取值
    
    

    事务的操作

    import redis 
    reshiwu = redis.StrictRedis(host='127.0.0.1',port=6379,db=0,password='123456')
    
    pip = reshiwu.pipeline()
    reshiwu.set('num1','1')
    reshiwu.set('num2','2')
    
    pip.incr('num1')
    print(reshiwu.get('num1'))
    pip.decr('num2')
    print(reshiwu.get('num2'))
    pip.execute()
    
  • 相关阅读:
    安装7-Zip后,鼠标右键菜单出现选项(CRC SHA)
    Windows添加右键菜单【转载】
    基于Visual Studio开发C++/Qt项目的使用笔记
    数组中的重复数字
    zookeeper的通知机制
    zookeeper有几种部署模式? zookeeper 怎么保证主从节点的状态同步?
    什么是springcloud?springcloud断路器的作用是什么?springcloud的核心组件有什么?
    springboot实现热部署的几种方式
    springboot的核心配置文件
    什么是springboot?为什么要用springboot?
  • 原文地址:https://www.cnblogs.com/quietzpc/p/12202900.html
Copyright © 2020-2023  润新知