zoukankan      html  css  js  c++  java
  • redis基础操作概念等笔记

    Redis常用配置

    • daemonize -》是否是后台进程
    • port -》对外端口
    • logfile -》Redis 系统日志
    • dir -》Redis 工作目录

    Redis的链接

    redis-cli -h 127.0.0.1 -p 6379
    

    测试链接

    使用ping返回PONG

    查看配置

    通过config get *命令可以查看

    通过配置文件方式启动

    找到redis所在的目录以下是mac系统的

    cd /usr/local/etc 
    

    复制一份新的配置文件

    cat redis.conf| grep -v "#" |grep -v "^$" >redis-6382.log
    

    配置文件内容如下

    daemonize yes #是否后台启动
    port 6382 #启动端口修改为6382
    dir /usr/local/var/db/redis/ #文件的位置,比如log
    logfile "6382.log" #log文件的名字
    

    启动

    redis-server redis-6382.conf
    

    查看进程

    ps -ef |grep redis-server |grep 6382
    

    通用命令

    keys:遍历出所有的key,O(n)时间复杂度,生产环境不建议多用,可以在从节点用。
    dbsize:计算key的总数,可以线上用,redis自带的计数器时间复杂度O(1)
    exists key:检查key是否存在,时间复杂度O(1)
    del key:删除key-value,时间复杂度O(1)
    expire key seconds:keys在seconds秒后过期,时间复杂度O(1)
    ttl key:查看key剩余的过期时间,-1表示存在但是没有过期时间,-2表示不存在。时间复杂度O(1)
    type key:键的类型,时间复杂度O(1)
    persist key:去掉key的过期时间,时间复杂度O(1)

    数据类型

    string,hash,list,set,sorted set

    编码形式

    raw,int,embstr,hashtable,ziplist,linkedlist,intest,skiplist

    单线程

    为什么?

    纯内存
    非阻塞IO(epoll)
    避免线程切换和资源竞争

    需要注意的:

    1.一次只执行一条命令
    2.拒绝长命令,比如keys *

    字符串

    结构和命令

    结构

    key hello value world
    key counter value 1
    key bit valuee 1010101010
    key j value json结构
    

    最大512M。
    命令
    get,set,del
    incr key 自增1
    decr 自减1
    incrby key k,自增k
    decrby key k 自减k

    场景

    • 缓存
    • 计数器
    • 分布式锁

    计数器
    incr userid:pageview

    缓存
    比如访问1.mp4,首先访问redis如果没有再访问mysql,mysql查到先反给redis,然后返回给客户。redis充当缓存的功能。

    分布式id生成器
    set setnx setxx
    set key value #设置key O(1)
    setnx key value #key不存在才设置 类似insert O(1)
    setxx key value #key存在才设置 类似update O(1)

    mset key1 key2 key3 O(n)
    mget key1 key2 key3 #节省了网络时间,批量查询,如果量大可以拆分。O(n)

    getset key value,设置新值返回老值 O(1)
    append key value 增加 O(1)
    strlen key 返回字符串的长度 O(1)

    incybyfloat key 3.5 #增加key对应之3.5
    getrange key start end #类似切片
    setrange key start end

    hash

    key {field:value}

    命令

    hget key field O(1)
    hset key field O(1)
    hdel key field O(1)

    hexists key field O(1)
    hlen key field O(1)
    hmget key field1 file2
    hmset key field1 file2

    记录网站每个用户个人网页的访问量

    hincrby user:1:info pageiew count
    

    其他命令

    hgetall key O(n)
    hvals key O(n)
    hkeys key O(n)

    列表

    TimeLine
    更新使用Lpush
    Lrange 获取数据

    其他

    blpop,lpop的阻塞版本,timeout是阻塞超时

    组合使用

    LPUSH +LPOP =stack
    LPUSH +RPOP =Queue
    LPUSH +LTRIM =列表大小有限制
    LPUSH +BRPOP =Message Queue

    集合

    sadd 添加
    scrad
    sismenember
    srandmemeber
    spop 集合弹出
    smembers

    实战

    添加标签,共同关注

    其他操作

    sdiff sinter sunion

    场景应用

    SADD 标签
    SPOP/SRANDMEMBER 随机数的场景
    SADD+SINTER 共同好友等功能

    有序集合

    zadd key socre element #添加元素
    zscore key element
    zcrad key #返回元素的个数
    zrank
    zrem
    zrange 0 -1 #返回指定索引范围内的升序元素
    zcount startscore endscore

    实战

    排行榜 根据时间戳或者阅读数之类的。

  • 相关阅读:
    LC 377. Combination Sum IV
    LC 718. Maximum Length of Repeated Subarray
    使用 Synchronized 关键字
    线程的基本概念
    谈谈 JAVA 的对象序列化
    JAVA 注解的基本原理
    基于 CGLIB 库的动态代理机制
    基于 JDK 的动态代理机制
    反射的基本原理
    泛型的基本原理
  • 原文地址:https://www.cnblogs.com/c-x-a/p/11017233.html
Copyright © 2011-2022 走看看