日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redis - 基础

發布時間:2024/9/30 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis - 基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

redis簡介

  • Redis 是一個開源的,基于內存的NoSql數據庫。 它支持多種數據結構 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets), bitmaps, hyperloglogs 和 地理空間(geospatial)。 Redis 內置了 復制,LUA腳本和磁盤持久化, 并通過 Redis哨兵(Sentinel)和集群(Cluster)保證了高可用。
  • 特點:快!讀寫性能可達到10萬/秒,這得益于所有數據都是存在內存中,而且采用單線程架構避免了線程之間切換和競爭帶來的問題,并且采用了epoll來實現IO多路復用。

使用場景簡單總結

redis的安裝使用

  • 安裝步驟:
  • 第一步:redis的源碼包上傳到linux,或者直接下載 wget http://download.redis.io/releases/redis-3.0.7.tar.gz,具體版本列表查看http://download.redis.io/releases
    第二步:tar xzf redis-3.0.7.tar.gz
    第三步:ln -s redis-3.0.7.tar.gz redis 建立了一個軟鏈接,不把redis目錄固定在指定版本上,有利于未來升級。非必要
    第四步:cd redis
    第五步:make
    第六步:make install 默認安裝到/usr/local/bin,可以在任意目錄下執行redis命令,也可以指定安裝配置make install PREFIX=/usr/local/redis。一般軟件安裝到/usr目錄下

    另外docker安裝更加方便docker run -p 6379:6379 --name redis -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

  • 遠程連接其他主機的redis遠程連接其他主機的redis
    vim redis.conf
    注釋以下綁定的主機地址#bind 127.0.0.1 或者bind 0.0.0.0
    修改protected-mode no 或者config set requirepass 123 ->123是密碼
    防火墻通過6379端口 iptables -I INPUT -p tcp --dport 6379 -j ACCEPT

  • 后臺啟動
    vim redis.conf
    daemon yes
    ./redis-server …/redis.conf (可以特殊指定redis.conf)

  • 連接redis
    ./redis-cli -h 192.168.0.1 -p 6379

  • 注冊為windows服務

  • redis-server --service-install redis.windows.conf卸載服務命令:redis-server --service-uninstall開啟服務redis-server –service-start停止服務redis-server –service-stop

    常用redis命令

  • keys命令

    dbsize返回當前數據庫的key數量。時間復雜度是O(1),不用擔心阻塞問題
    keys 返回當前數據庫指定正則匹配的key,因可能會阻塞較長時間生產環境禁用,推薦scan
    scan 它們每次執行都只會返回部分元素(默認10個),不會出現像 KEYS 或者 SMEMBERS 命令帶來的可能會阻塞服務器的問題。對應集合遍歷內部元素的有hcan、sscan、zscan。

    exists
    rename 重命名。如果newkey已經存在,則值將被覆蓋.可使用renamenx
    randomkey 隨機返回一個鍵
    del 批量刪除key 。 如某些key不存在,則直接忽略

    expire 設置key的過期時間 。過期時間為負值會立即被刪除。返回 -1沒有設置過期時間,-2鍵不存在。list,hash不支持集合內部元素的過期功能
    persist 將key設置為永久的
    ttl 返回key的剩余過期時間

    type 存儲的數據結構類型,即string,hash, list, set和zset的類型
    object encoding返回內部的實際編碼格式,如string結構類型其實內部對應著int embstr raw 三種編碼格式

    遷移鍵可以使用move,dump+restore, migrate。推薦使用migrate,原子性操作,支持多個鍵,只需要在源redis上操作即可,簡單方便。

  • string類型

  • 常用命令描述備注
    set設置key value
    如果已存在key 會覆蓋(包括過期時間)
    EX – 設置鍵key的過期時間,單位秒
    PX – 設置鍵key的過期時間,單位毫秒
    NX – 只有鍵key不存在的時才會設置key的值
    XX – 只有鍵key存在的時才會設置key的值
    SET命令加上選項已經可以完全取代SETNX, SETEX, PSETEX
    setrange從指定的offset處開始,覆蓋value的一部分和getrange對應
    setexSETEX key seconds value
    設置過期時間
    可以被set代替; psetex是以毫秒為單位
    setnxSET if Not eXists的簡寫
    當key不存在時才設置
    可以被set代替
    mset批量設置key valuemsetnx批量設置,是原子的,如果有一個key存在全部失敗
    getset設置key value并返回原來key對應的value和INCR一起使用可實現重置的計數功能
    append追加value值
    get返回string類型的value
    mget批量返回key的值
    getrange返回value中指定的子串
    strlen返回key的string類型value的長度
    incr將整數型的value值加1incrby 指定增加的值,可為負數
    decr將整數型的value值減1decrby 指定減少的值,可為負數

    緩存,降低數據庫壓力:
    存儲如共享session,JWTtoken等;校驗用戶獲取驗證碼次數或者一天內登陸失敗次數等等,利用注解+AOP來攔截實現
    3. hash類型

    將key值進行分類管理,并且大多情況下占用內存更少

    常用命令描述備注
    hsethset myhash:001 name xiaoming
    hmset批量設置指定key哈希集中指定的字段
    hsetnx只在 key 指定的哈希集中不存在指定的字段時,設置字段的值
    hdel從 key 指定的哈希集中移除指定的域
    hexists返回hash里面field是否存在
    hget
    hmget批量返回指定key哈希集中指定的字段
    hgetall返回指定key哈希集中所有的字段和值hkeys 返回所有字段;hvals返回所有字段對應的值
    hlens返回 key 指定的哈希集包含的字段的數量
    hincrby
  • list列表

  • set集合
    是string類型的無序集合,可以對集合求交集sinter,并集sunion,差集sdiff,可應用于好友推薦,tag標簽查詢等場景。

    標簽的簡單示例:
    給用戶添加標簽sadd user:1:tags tag1 tag2 tag3 , sadd user:2:tags tag1 tag2 tag3
    給標簽添加用戶sadd tag1:users user:1 user:2, sadd tag2:users user:1 user:2
    注意上面要放在一個事務中執行,可利用lua腳本
    獲取兩個用戶共有的標簽 sinter user:1:tags user:2:tags

  • zset有序集合
    排行榜系統

  • 連接和服務器配置常用命令

  • 常用命令描述備注
    authauth password 驗證密碼登錄
    ping測試連接,成功返回pang
    select選擇數據庫
    config get讀取redis服務器的配置文件參數* 可讀取所有支持的配置參數
    也可參看單獨某個參數,如config get requirepass查看密碼 (感覺這樣很不安全)
    config set設置redis服務器的配置文件參數如:可以用來設置密碼(立即生效)
    config set requirepass 123456
    服務器重啟后修改會失效,若想長久保存可追加 “config rewrite”命令
    flushdb清除當前數據庫危險命令,建議rename-command來規避
    flushall刪除所有數據庫
    slaveofSLAVEOF host port 變為指定服務器的從服務器利用SLAVEOF NO ONE可以切換為主服務器
    shutdown關閉redis服務
  • 調試常用命令
  • 常用命令描述備注
    info以一種易于理解和閱讀的格式,
    返回關于Redis服務器的各種信息和統計數值。
    monitor用于調試,開啟后顯示服務器當前執行的命令ctrl+c結束
    object查看key的編碼方式,被引用的次數,空閑時間
    dbsize返回當前數據里面keys的數量
    role返回主從角色
    client list返回連接的客戶端列表
    client kill關閉指定客戶端連接

    redis基本特性

    1. redis的安全性

    • 在redis.conf配置文件里可以通過requirepass password 來設定密碼;也可以在客戶端通過config set requirepass password來設定密碼(立即生效,但服務器重啟后修改會失效,若想長久保存可追加 “config rewrite”命令)。然后連接redis(注意連接成功后但其實并未被授權),可通過auth password輸入密碼通過驗證。注意:因為redis的查詢服務特別快,因此密碼要設置的足夠長,防止暴力破解。

    • 高版本的redis安裝完默認只能本地連接 (bind 127.0.0.1),且開啟了保護模式(protected-mode yes ),可以通過修改這兩項來讓其他客戶端連接redis服務。

    • 生產環境上對一些危險的命令(如flushdb,flushall,keys,config set,config get等)要禁用或重命名。具體做法是,修改服務器的配置文件redis.conf,在SECURITY這一項中,我們新增以下命令:

    rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC81TbdkSmLAzRPmcarcR rename-command FLUSHDB qf69aZbLAX3cf3ednHM3SOlbpH71yEXLAX3cf3e rename-command CONFIG FRaqbC8wSA1XvpFVjCRGryWtIIZS2TRvpFVjCRG rename-command KEYS eIiGXix4A2DreBBsQwY6YHkidcDjoYA2DreBBsQ #如果要禁用則: rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command CONFIG "" rename-command KEYS ""

    更多redis安全內容參考官方中文文檔

    附錄

    redis2.8-redis.conf

    總結

    以上是生活随笔為你收集整理的redis - 基础的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。