<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                一)Redis初始 * 定義 Redis是一款使用C語音編寫的開源的,支持網絡,基于內存,可持久性的鍵值對存儲數據庫(是基于鍵值對的NoSQL數據庫) * 特性 開源 支持多種數據結構 高性能 基于鍵值的存儲服務系統 可持久化 特性1: 速度快 由于redis是單線程模型,使用C語言編寫,數據存在內存中,所以redis的速度快 特性2:持久化 redis所有的數據保存在內存中,數據的更新將異步地保存到磁盤上 特性3: 數據結構 ![](https://box.kancloud.cn/7d0a68bebb2196f3b7f3ddee102488b0_633x280.png) 特性4: 支持多語言客戶端 如java、php、python、ruby、nodejs等 特性5: 功能豐富 如發布訂閱、lua腳本、事務 特性6: 復制功能 ![](https://box.kancloud.cn/f04dcbf79cfd7b83bb0a7415ce445a46_588x447.png) 特性7: 高可用 redis-sentinel支持高可用 分布式redis-cluster支持 二) Redis的典型使用場景 * 數據緩存系統 * 消息隊列系統 * 排行榜 * 社交網絡 三)事務 Redis通過MULTI、EXEC、DISCARD和WATCH命令來實現事務 事務可以一次執行多個命令,事務是一個原子操作,事務中的命令要不全部被執行,要么全部都不執行,事務中的所有命令都會序列號,按順序執行,事務執行過程中,不會被其他發送來的請求所打斷 EXEC命令:負責觸發并執行事務中的所有命令 * 如果客戶端在使用 MULTI 開啟了一個事務之后,卻因為斷線而沒有成功執行 EXEC ,那么事務中的所有命令都不會被執行。 * 另一方面,如果客戶端成功在開啟事務之后執行 EXEC ,那么事務中的所有命令都會被執行。 MULTI 命令用于開啟一個事務,它總是返回 OK 。 通過調用 DISCARD , 客戶端可以清空事務隊列, 并放棄執行事務。 通過exec執行,回復元素的先后順序和命令發送的先后順序一致。 ~~~ 192.168.20.144:6379> MULTI (開啟事務) OK 192.168.20.144:6379> set mystring01 a QUEUED 192.168.20.144:6379> lpush mylist02 a b QUEUED 192.168.20.144:6379> rpush mylist03 c 1 2 aa QUEUED 192.168.20.144:6379> lrange mylist 0 -1 QUEUED 192.168.20.144:6379> exec (執行) 1) OK 2) (integer) 2 3) (integer) 4 4) 1) "1" 2) "10" 3) "x" 4) "b" 5) "a" ~~~ 事務中的錯誤 * 事務在執行exec之前,入隊的命令可能會出錯(比如命令語法錯誤,參數錯誤等),或者其他更嚴重的錯誤(如內存不足) * 命令可能在exec調用之后失敗,事務中的命令處理了錯誤類型的鍵 * 如果命令入隊時返回 QUEUED ,那么入隊成功 命令入隊列中發生錯誤 ~~~ 192.168.20.144:6379> MULTI OK 192.168.20.144:6379> get ip QUEUED 192.168.20.144:6379> set port 6080 QUEUED 192.168.20.144:6379> sett (error) ERR unknown command 'sett' 192.168.20.144:6379> exec (error) EXECABORT Transaction discarded because of previous errors. ~~~ 事務在執行中發生的錯誤 ~~~ 192.168.20.144:6379> clear 192.168.20.144:6379> MULTI OK 192.168.20.144:6379> set ip 192.168.20.144 QUEUED 192.168.20.144:6379> get ip QUEUED 192.168.20.144:6379> set port 8000 QUEUED 192.168.20.144:6379> get ports QUEUED 192.168.20.144:6379> lpush mylist05 aa bb cc QUEUED 192.168.20.144:6379> LRANGE mylist05 0 -1 QUEUED 192.168.20.144:6379> exec 1) OK 2) "192.168.20.144" 3) OK 4) (nil) 5) (integer) 3 6) 1) "cc" 2) "bb" 3) "aa" (當執行事務期間,遇到一個錯誤,不僅不會回滾,還會跳過該錯誤,具體執行后續的事務) ~~~ * WATCH 樂觀鎖,在exec命令執行之前,可以監視指定數量的鍵,如果監視的某任意鍵數據被修改,則服務器拒絕執行事務 ~~~ [admin@huancun01 ~]$ sudo redis-cli -h 192.168.20.144 -p 6379 -a Aa123456 192.168.20.144:6379> WATCH ip OK 192.168.20.144:6379> MULTI OK 192.168.20.144:6379> set ip 192.168.20.144 QUEUED 192.168.20.144:6379> get ip QUEUED 192.168.20.144:6379> set port 8000 QUEUED 192.168.20.144:6379> get port QUEUED (監控的鍵IP發生改變,執行exec就會錯誤,事務不會被運行) 192.168.20.144:6379> exec (nil) ~~~ 四)Connection相關命令 192.168.20.144:6379> ping PONG 192.168.20.144:6379> select 0 OK (select挑選指定的名稱空間) 192.168.20.144:6379> quit (退出) 五)Server相關命令 ~~~ 192.168.20.144:6379> CLIENT list id=8 addr=192.168.20.144:51120 fd=5 name= age=940 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client 192.168.20.144:6379> CLIENT setname localconn OK 192.168.20.144:6379> CLIENT GETNAME "localconn" 192.168.20.144:6379> CONFIG GET port 1) "port" 2) "6379" 192.168.20.144:6379> config get bind 1) "bind" 2) "192.168.20.144" 192.168.20.144:6379> info # Server redis_version:3.2.10 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:c8b45a0ec7dc67c6 redis_mode:standalone os:Linux 3.10.0-514.el7.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:4.8.5 process_id:2856 run_id:2ac38a433d69ced4778a1cb93922c83ecc511c2a tcp_port:6379 uptime_in_seconds:22017 uptime_in_days:0 hz:10 lru_clock:9512727 executable:/usr/bin/redis-server config_file:/etc/redis.conf # Clients connected_clients:1 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 # Memory used_memory:819272 used_memory_human:800.07K used_memory_rss:2813952 used_memory_rss_human:2.68M used_memory_peak:839936 used_memory_peak_human:820.25K total_system_memory:512450560 total_system_memory_human:488.71M used_memory_lua:37888 used_memory_lua_human:37.00K maxmemory:128000000 maxmemory_human:122.07M maxmemory_policy:noeviction mem_fragmentation_ratio:3.43 mem_allocator:jemalloc-3.6.0 # Persistence loading:0 rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 rdb_last_save_time:1519461919 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:0 rdb_current_bgsave_time_sec:-1 aof_enabled:0 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:-1 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok # Stats total_connections_received:7 total_commands_processed:230 instantaneous_ops_per_sec:0 total_net_input_bytes:8433 total_net_output_bytes:63678 instantaneous_input_kbps:0.00 instantaneous_output_kbps:0.00 rejected_connections:0 sync_full:0 sync_partial_ok:0 sync_partial_err:0 expired_keys:2 evicted_keys:0 keyspace_hits:91 keyspace_misses:7 pubsub_channels:0 pubsub_patterns:0 latest_fork_usec:1328 migrate_cached_sockets:0 # Replication role:master connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 # CPU used_cpu_sys:25.20 used_cpu_user:0.84 used_cpu_sys_children:0.05 used_cpu_user_children:0.00 # Cluster cluster_enabled:0 # Keyspace db0:keys=23,expires=0,avg_ttl=0 ~~~ 七)發布與訂閱(pub/sub) SUBSCRIBE 、 UNSUBSCRIBE 和 PUBLISH 三個命令實現了發布與訂閱信息泛型 ~~~ 192.168.20.144:6379> help SUBSCRIBE SUBSCRIBE channel [channel ...] summary: Listen for messages published to the given channels since: 2.0.0 group: pubsub ~~~ 案例: ~~~ 192.168.20.144:6379> SUBSCRIBE news (發布) Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "news" 3) (integer) 1 1) "message" 2) "news" 3) "hello" 1) "message" 2) "news" 3) "redis" 192.168.20.144:6379> PUBLISH news hello (訂閱) (integer) 1 192.168.20.144:6379> PUBLISH new redis (integer) 0 192.168.20.144:6379> PUBLISH news redis (integer) 1 模式訂閱 192.168.20.144:6379> PSUBSCRIBE "news.i[to]" Reading messages... (press Ctrl-C to quit) 1) "psubscribe" 2) "news.i[to]" 3) (integer) 1 1) "pmessage" 2) "news.i[to]" 3) "news.it" 4) "aaa" 1) "pmessage" 2) "news.i[to]" 3) "news.it" 4) "bb" 1) "pmessage" 2) "news.i[to]" 3) "news.it" 4) "cc" 1) "pmessage" 2) "news.i[to]" 3) "news.io" 4) "cc" ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看