zoukankan      html  css  js  c++  java
  • Redis简单操作

    Redis简介

    Redis以键值对的形式储存数据

    Redis支持的数据类型有:string、list、set、zset(sorted set)、hash

    Redis特点:

    • 响应速度快,数据量小
    • Redis以内存作为数据存储介质,所以读写数据的效率极高

    安装

    下载地址:

    与其他数据库的比较

    Redis VS MySQL

    • redis: 内存数据库(读写快)、非关系型(操作数据方便、数据固定)
    • mysql: 硬盘数据库(数据持久化)、关系型(操作数据间关系、可以不同组合)

    大量访问的临时数据,才有redis数据库更优

    Redis VS Memcache

    • redis: 操作字符串、列表、字典、无序集合、有序集合 ,支持数据持久化(数据丢失可以找回(默认持久化,主动持久化save)、可以将数据同步给mysql) , 高并发支持
    • memcache: 操作字符串 , 不支持数据持久化 , 并发量小

    Redis操作

    启动服务

    前提:前往一个方便管理redis持久化文件的路径再启动服务:dump.rdb
    1)前台启动服务
    >: redis-server
    2)后台启动服务
    >: redis-server --service-start
    3)配置文件启动服务
    >: redis-server 配置文件的绝对路径
    >: redis-server --service-start 配置文件的绝对路径
    eg>: redis-server --service-start D:/redis/redis.conf
    

    密码管理

    • 提倡在配置文件中配置,采用配置文件启动
      requirepass 密码

    • 当服务启动后,并且连入数据库,可以再改当前服务的密码(服务重启,密码重置)
      config set requirepass 新密码

    • 连入数据库,查看当前服务密码密码
      config get requirepass

    连接数据库

    1)默认连接:-h默认127.0.0.1,-p(端口号)默认6379,-n(数据库编号)默认0,-a(密码)默认无
    >: redis-cli
    
    2)完整连接:
    >: redis-cli -h ip地址 -p 端口号 -n 数据库编号 -a 密码
    
    3)先连接,后输入密码
    >: redis-cli -h ip地址 -p 端口号 -n 数据库编号
    >: auth 密码
    

    关闭服务

    • 在没有连接进数据库时执行 redis-cli shutdown
    • 连接进数据库后执行 shutdown

    数据持久化

    • 配置文件的 默认配置
      • save 900 1 超过900秒有1个键值对操作,会自动调用save完成数据持久化
      • save 300 10 超过300秒有10个键值对操作,会自动调用save完成数据持久化
      • save 60 10000 超过60秒有10000个键值对操作,会自动调用save完成数据持久化
    • 安全机制
      • 当redis服务不可控宕机,会默认调用一下save完成数据持久化
    • 主动持久化
      • save 连入数据库时,主动调用save完成数据持久化
    • 注:数据持久化默认保存文件 dump.rdb,保存路径默认为启动redis服务的当前路径

    Redis五种数据类型的操作

    string字符串

    • 基本操作
    # 设置
    set key value  (例如: set name reese)
    
    # 获取value值
    get key (例如: get name)
    
    # key是唯一的,不能用同一个key,否则会覆盖
    
    
    # 设置多个值
    mset k1 v1 k2 v2 ...
    
    # 获取多个值
    mget k1 k2 ...
    
    # 给key设置过期时间
    setex key exp value
    
    # 将 key 所储存的值加上增量 increment 。
    incrby key increment
    
    • 查看过期时间
    127.0.0.1:6379> ttl name
    (integer) -1
    
    # -1代表永久, -2代表不存在
    
    • 设置过期时间
    # 给已存在的key设置过期时间
    expire key seconds   (例子:expire name 10)
    
    # 设置key的同时,设置过期时间
    set key value ex seconds  (例如: set name reese ex 20)
    或者
    setex key seconds value   (例如: setex name 20 cwz)
    
    • 追加
    # 给已有的value值,添加新的值
    
    append key value
    
    
    • 设置/获取多个
    # 设置多个string
    mset key value key value ...
    
    例如:
    mset user cwz password 123
    
    
    # 获取多个
    mget key key key ...
    
    例子:
    mget user password
    
    • key操作
    # 查看所有的key值
    keys *
    
    # 删除
    del key
    
    # 查看key是否存在,存在返回1,不存在返回0
    exists key
    
    # 查看key类型
    type key
    
    
    • 运算
    set num 1   # 自动识别,字符串里面的整数
    
    incr num    # 加1
    
    decr num    # 减1
    
    incrby num 50  # 增加多个
    
    descby num 50  # 减少多个
    

    list列表

    栈:先进后出

    队列:先进先出

    • 设置
    # 左添加   栈 先进后出
    127.0.0.1:6379> lpush my_list 1 2 3 4 5 6 
    (integer) 6
    
    # 右添加   队列 先进先出
    rpush my_list 7 8
    
    • 查看
    查看所有:
    127.0.0.1:6379> lrange my_list 0 -1
    1) "6"
    2) "5"
    3) "4"
    4) "3"
    5) "2"
    6) "1"
    
    • 获得list的元素个数
    llen my_list
    
    • 查看特定索引位置的元素
    lindex my_list 2
    
    • 删除
    lpop my_list     # 删除左边第一个
    
    rpop my_list     # 删除右边第一个
    
    
    lrem my_list 1 5  # 表示从左往右删除1个5
    
    lrem my_list 0 5  # 表示删除所有的5
    
    lrem my_list -2 5  # 表示从右往左删除2个5
    
    

    hash(字典)

    是一个string类型的field和value的映射表,特别适合用于存储对象

    hash的key必须是唯一的

    Key : (field:value)

    • 设置
    hset key field value
    
    # 例子:
    hset users name xxx
    
    • 获取
    hget key field
    
    # 例子:
    hget users name
    
    • 删除
    hdel key field
    
    # 例子:
    hdel users name
    
    • 设置多个
    hmset user name yyy age 19 sex male
    
    • 获取多个
    hmget user name age sex
    
    • 获取全部field value
    hgetall user
    
    • 获取所有的field
    hkeys user
    
    • 获取所有的value
    hvals user
    
    • 获取field个数
    hlen key
    
    • 获取field类型
    type key
    

    set集合

    • 设置
    sadd my_set 1 2 3 4 5 6
    
    • 获取
    smembers key
    
    • 删除
    # srem指定删除
    srem key members
    
    # spop随即删除
    spop key
    
    • 移动一个集合的值到另一个集合
    smove oldkey newkey members
    
    例子:
    smove my_set1 my_set2 3
    
    • 判断集合存在某个值
    sismember key value
    
    • 交集
    sinter key1 key2 ...
    
    
    # 把key1 key2的交集合并到newkey
    sinterstore newkey key1 key2
    
    • 并集
    sunion key1 key2 ...
    
    # 把key1 key2的并集合并到newkey
    sunionstore newkey key1 key2
    
    • 差集
    sdiff key1 key2 ...
    
    # 把key1 key2的差集合并到newkey
    sdiffstore newkey key1 key2
    
    
    • 获取集合个数
    scard key 
    
    • 随机返回一个数据
    srandmember key
    

    sorted set 有序集合

    • 设置
    zadd key score member   (权,权重,顺序)
    
    例子:
    127.0.0.1:6379> zadd my_zset1 1 1 2 2 3 3 4 4 5 5 6 6
    
    127.0.0.1:6379> zrange my_zset1 0 -1
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    6) "6"
    
    • 查询获取
    # zrange 正序
    
    zrange my_zset1 0 -1
    
    
    # zrevrange 倒序
    
    zrevrange my_zset1 0 -1
    
    • 删除
    zrem my_zset1 2
    
    • 索引
    # zrank 正序
    zrank key member
    
    # zrevrank 反序
    zrevrank key member
    
    
    • zcard 查看有序集合元素数
    zcard key
    
    • zrangebyscore 返回集合中score在给定区间的元素
    # zrange my_zset 0 -1 withscores
    
    zrangebyscore my_zset 2 3 withscores
    # 返回了score在2~3区间的元素
    
    • zcount 返回集合中在定区间的数量
    zount key min max
    
    例子
    zount my_zset 2 3
    
    • zscore 查看score(权重)值
    zscore key member
    
    例子
    zscore my_zset 3
    
    • zremrangebyrank 删除集合中排名在定区间中的元素
    # zrange my_zset 0 -1 withscores
    zrerangebyrank my_zset 1 3
    
    • zremrangebyscore 删除集合中score在给定区间的元素
    # zrange my_zset 0 -1 withscores
    zremrangebyscore my_zset 1 3
    

    python操作Redis

    安装 包 pip install redis

    直接使用

    import redis
    
    rdb = redis.Redis(
        host='127.0.0.1',
        port=6379,
        db=0,
        password=None,
        decode_responses=True
    )
    rdb.set('name', 'reese')
    print(rdb.get('name'))
    

    连接池使用

    import redis
    
    pool = redis.ConnectionPool(
        host='127.0.0.1',
        port=6379,
        db=0,
        password=None,
        decode_responses=True
    )
    rdb = redis.Redis(connection_pool=pool)
    
    print(rdb.get('name'))
    

    一些操作:

    rdb.expire('user_name', 20)  # 添加过期时间
    
    rdb.ttl('user_name') # 在python中不能查看
    
    rdb.mset(a=1, b=2)   # 设置多个
    
    rdb.incr('num',222)  # 后面直接加参数为数量,如果不加参数,默认加1
    
    rdb.lrem('list_1', 3, 0) # 要删的数量在后面,删除的元素在前面
    
    rdb.hmset('user', {'name':'neo', 'age':19}) # key单独写出,后面用字典方式添加
    
  • 相关阅读:
    DOS命令行编译运行java
    mysql安装
    ICCV2021 | Vision Transformer中相对位置编码的反思与改进
    ICCV2021 | 医学影像等小数据集的非自然图像领域能否用transformer?
    ICCV2021 | TransFER:使用Transformer学习关系感知的面部表情表征
    2021视频监控中的多目标跟踪综述
    ML2021 | (腾讯)PatrickStar:通过基于块的内存管理实现预训练模型的并行训练
    ICCV2021 | SOTR:使用transformer分割物体
    ICCV2021 | PnPDETR:用Transformer进行高效的视觉分析
    使用Latex/Tex创建自己的简历。
  • 原文地址:https://www.cnblogs.com/setcreed/p/12173913.html
Copyright © 2011-2022 走看看