• 01 redis 基础入门


    课程学习地址:
    https://www.bilibili.com/video/BV1S54y1R7SB?p=23
    中间手册地址:
    http://www.redis.cn/

    介绍

    Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

    特点

    redis与memcache比较

    1.存储类型:m string r:字哈链俩集合,空基bitmaps
    2.持久化:m 内存 r:内存/硬盘
    3.存在大小 一个键m:1M r:1G

    适用场景

    redis 核心配置说明

    daemonize:#是否以后台守护进程方式运行
    
    pidfile:#pid 文件位置
    
    port:#监听的端口号
    
    timeout:#请求超时时间
    
    loglevel:#log 信息级别,总共支持四个级别:debug、verbose、notice、 默认为 verbose
    
    logfile:#默认为标准输出(stdout) ,如果配置为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/
    
    databases:#开启数据库的数量。使用“SELECT 库 ID”方式切换操作各个数据库
    
    save * *:#保存快照的频率,第一个*表示多长时间,第二个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
    
    rdbcompression:#保存快照是否使用压缩
    
    dbfilename:#数据快照文件名(只是文件名,不包括目录) 。默认值为 dump.rdb
    
    dir:#数据快照的保存目录(这个是目录)
    
    requirepass:#设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需 要通过 AUTH <password>命令提供密码,默认关闭
    
    

    Redis 对key的通用操作命令

    常用命令

    key是一个字符串,通过key获取redis中保存的数据

    key所涉及的操作

    对于key自生状态的相关操作,例如:删除,判定存在,获取类型等
    
    对于key有效性控制的相关操作,例如:有效期设定,判断是否有效,有效状态的切换等
    
    对于key快速查询操作,例如:按指定策略查询key
    

    key基本操作

    删除指定key: del key
    
    获取key是否存在:exists key
    
    获取key的类型:type key
    
    具体实现:
    

    key扩展操作
    
        为指定key设置有效期
    
            expire key seconds
    
            pexpire key milliseconds
    
            expireat key timestamp
    
            pexpireat key milliseconds-timestamp
    
        获取key的有效时间
    
            ttl key秒
    
            pttl key毫秒
    
        切换key从时效性转化为永久性
    
            persist key
    
        具体实现:
    
    查询key
    
        keys pattern
    
        查询模式规则
    
            *:匹配任意数量的任意字符
    
            ?:匹配一个任意符号
    
            []:匹配一个指定符号
    
    key的其他操作
    
        为key改名
    
            rename key newkey
    
            renamenx key newkey
    
        对所有key排序
    
            sort
    
        删除key
    
            del key1 key2 ... keyn
    
        其他key的通用操作
    
            help @generic
    
    
    127.0.0.1:6379> ping
    PONG
    127.0.0.1:6379> set name haima
    OK
    127.0.0.1:6379> set age 19 # 设置键值
    OK
    127.0.0.1:6379> get name # 获取键值
    "haima"
    127.0.0.1:6379> dbsize # 返回当前库里所有的key的数量
    (integer) 2
    127.0.0.1:6379> move age 2 # 移动某一个键到其他仓库
    (integer) 1
    127.0.0.1:6379> exists age #判断key是否存在
    (integer) 0
    127.0.0.1:6379> select 2 #选择库  有0-15个库
    OK
    127.0.0.1:6379[2]> get age
    "19"
    127.0.0.1:6379[2]> select 0  #选择库  有0-15个库
    OK
    127.0.0.1:6379> keys * # keys* 获取所有的key 慎用
    1) "name"
    127.0.0.1:6379> KEYS na* #获取以na开头的key *通配任意多个
    1) "name"
    127.0.0.1:6379> KEYS *ame*
    1) "name"
    127.0.0.1:6379> keys a?? # ?通配单个字符
    1) "age"
    redis 127.0.0.1:6379> keys ag[eaw]
    "age"
    127.0.0.1:6379> exists name # 查key是否存在 
    (integer) 1
    127.0.0.1:6379> type age # 获取key值的类型
    string
    127.0.0.1:6379> set a 11
    OK
    127.0.0.1:6379> get a
    "11"
    127.0.0.1:6379> del a # 删除key
    (integer) 1
    127.0.0.1:6379> get a
    (nil)
    127.0.0.1:6379> expire nme 10 #作用:设置key 10秒后过期
    (integer) 1
    127.0.0.1:6379> ttl nme # 查看key还有多久过期
    (integer) 6
    127.0.0.1:6379> ttl age # -1 为永久 
    (integer) -1
    127.0.0.1:6379> ttl b  # -2 key不存在
    (integer) -2
    
    127.0.0.1:6379> persist nme # 作用:把指定key设置为永久有效
    
    127.0.0.1:6379> randomkey # 从当前数据库中随机返回一个 key 。 
    "name"
    127.0.0.1:6379> randomkey
    "age"
    
    127.0.0.1:6379> keys *
    1) "name"
    2) "age"
    127.0.0.1:6379> rename name name2 # 修改 key 的名称 如果新key已经存在,会覆盖key里的值
    OK
    127.0.0.1:6379> keys *
    1) "name2"
    2) "age"
    127.0.0.1:6379> renamenx name2 name # 仅当 newkey 不存在时,将 key 改名为 newkey 。
    (integer) 1
    127.0.0.1:6379> keys *
    1) "age"
    2) "name"
    127.0.0.1:6379> renamenx name age # 如果新key已经存在了,就修改不成功
    (integer) 0
    
    
    127.0.0.1:6379> flushdb #删除当前数据库
    OK
    127.0.0.1:6379> flushall #删除所有库中的数据
    OK
    
    

    字符串

    基本介绍:

    命名规范:

    常用命令

    127.0.0.1:6379> set key1 v1 设置key值
    OK
    127.0.0.1:6379> get key1 # 获key值
    "v1"
    127.0.0.1:6379> keys * # 获取所有的key
    1) "key1"
    127.0.0.1:6379> exists key1 # 判断key是否存在
    (integer) 1
    127.0.0.1:6379> append key1 hello # append:在尾部追加值,格式是:append key值 追加的值
    (integer) 7
    127.0.0.1:6379> get key1
    "v1hello"
    127.0.0.1:6379> strlen key1 # 获取key值的长度
    (integer) 7
    127.0.0.1:6379> append key1 ,haima  #append:在尾部追加值,格式是:append key值 追加的值
    (integer) 13
    127.0.0.1:6379> strlen key1
    (integer) 13
    127.0.0.1:6379> get key1
    "v1hello,haima"
    
    # i++  
    # 步长 i+=
    
    127.0.0.1:6379> set views 0
    OK
    127.0.0.1:6379> get views
    "0"
    127.0.0.1:6379> incr views # 自增1 浏览量变为1
    (integer) 1
    127.0.0.1:6379> get views
    "1"
    127.0.0.1:6379> decr views  # 自减1 浏览量变为1
    (integer) 0
    127.0.0.1:6379> get views
    "0"
    127.0.0.1:6379> incrby views 10 # 自增 步长10 
    (integer) 10
    127.0.0.1:6379> get views
    "10"
    127.0.0.1:6379> decrby views 5 # 自减 步长5 
    (integer) 5
    127.0.0.1:6379> get views
    "5"
    
    
    # 客符串范围 range
    127.0.0.1:6379> set key1 hello,haima
    OK
    127.0.0.1:6379> get key1
    "hello,haima"
    127.0.0.1:6379> getrange key1 0 3 # 截取范围[0,3]
    "hell"
    127.0.0.1:6379> getrange key1 0 -1 # 获取全部的字符串,和get key是一样的
    "hello,haima" 
    

    应用场景:
    1.字符串
    2.对象字符串 # set user:1 {name:zhangsan,age:30}
    3.这里的key是一个巧妙的设计: user:{id}:{filed} #如此设计在redis中是完全ok的

    127.0.0.1:6379> mset user:1:name haima user:1:age 30
    OK
    127.0.0.1:6379> mget user:1:name user:1:age    
    1) "haima"
    2) "30"
    

    Hash类型

    Map集合,key-map!时候这个值是一个map集合!本质和String类型没有太大区别,还是一个简单的key-value!

    命令:

    存/取/删除操作:

    ##############################################################################################
    127.0.0.1:6379> hset user01 name haima # 设置
    (integer) 1
    127.0.0.1:6379> hget user01 name # 获取
    "haima"
    127.0.0.1:6379> hmset user01 gender nan gender 30  # 批量设置
    OK
    127.0.0.1:6379> hmget user01 name gender gender # 批量获取
    1) "haima"
    2) "nan"
    3) "30"
    127.0.0.1:6379> hdel user01 denger # 删除指定的map里的key
    (integer) 1
    127.0.0.1:6379> hgetall user01  # 获取所有的map 键值
    1) "name"
    2) "haima"
    3) "gender"
    4) "nan"
    
    ##############################################################################################
    # hlen # 获取map表的字段数量
    # hexists # 判断健是否存在
    
    127.0.0.1:6379> hmset user1 name haima denger nan
    OK
    127.0.0.1:6379> hgetall user1
    1) "name"
    2) "haima"
    3) "denger"
    4) "nan"
    127.0.0.1:6379> hlen user1 # 获取map表的字段数量
    (integer) 2
    
    127.0.0.1:6379> hexists user1 name # 判断健是否存在 返回 1:存在 0:不存在
    (integer) 1
    127.0.0.1:6379> hexists user1 age
    (integer) 0
    
    ##############################################################################################
    # 只获取所有的field
    # 只获取所有的value
    127.0.0.1:6379> hkeys user1
    1) "name"
    2) "denger"
    127.0.0.1:6379> hvals user1
    1) "haima"
    2) "nan"
    
    ##############################################################################################
    incr 正int/负int
    127.0.0.1:6379> hset user1 age 30 # 指定增量
    (integer) 1
    127.0.0.1:6379> hincrby user1 age 2
    (integer) 32
    127.0.0.1:6379> hincrby user1 age -1
    (integer) 31
    127.0.0.1:6379> hsetnx user1 height 170  # 如果key不存在,添加成功
    (integer) 1
    127.0.0.1:6379> hsetnx user1 height 171  # 如果key存在,添加失败
    (integer) 0
    
    

    使用场景:

    hash适合对象的存储,string适合字符串的存储

    保存经常变更的信息(用户信息):
    hmset user:1 name haima age 30

    更多文章
  • 相关阅读:
    9个数中取最大值最小值速度问题
    ubuntu 12.04安装git 1.8.11
    <转>Win7资源管理器更新后不断重启解决方案
    windows下安装安卓开发环境和NDK支持
    饱和算法
    bzip21.0.6
    《转》GetFileTitle与文件扩展名是否显示有关
    Ubuntu设置环境变量PATH的三种方法 <转>
    ubuntu下使用脚本交叉编译windows下使用的ffmpeg
    UnxUtils windows下linux命令
  • 原文地址:https://www.cnblogs.com/haima/p/13689289.html
Copyright © 2020-2023  润新知