<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                對比著關系型數據庫,我們對redis key的設計一般有以下兩種格式: - **表名:主鍵名:主鍵值:列名** - **表名:主鍵值:列名** 在所有主鍵名都是id的情況下(其實我個人不喜歡這種情況,比如user表,它的主鍵名就應該是user_id,而不是id,這樣在表與表之間關聯的時候一目了然) > 用冒號作為分割是設計key的一種不成文的原則,遵循這種格式設計出的key在某些redis客戶端下可以有效的識別; ![key設計技巧.jpg-120.9kB][1] 但是,在關系型數據中,除主鍵外,還有可能根據其他列來查詢。 如上表中, username 也是極頻繁查詢的,往往這種列也是加了索引的。 轉換到k-v數據中,則也要相應的生成一條按照該列為主的key-value。 Set user:username:lisi:uid 9 #但是要保證username是唯一的; 這樣,我們可以根據username:lisi:uid ,查出userid=9, 再查user:9:password/email ... ## mysql與redis的數據轉換實例 **mysql數據準備** ```sql CREATE TABLE `book` ( `book_id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL DEFAULT '' COMMENT '書名', `add_time` int(10) NOT NULL DEFAULT '0' COMMENT '添加時間', PRIMARY KEY (`book_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='書本表'; INSERT INTO book VALUES (5, 'PHP圣經', UNIX_TIMESTAMP() ), (6, 'ruby實戰', UNIX_TIMESTAMP() ), (7, 'mysql運維', UNIX_TIMESTAMP() ), (8, 'ruby服務端編程', UNIX_TIMESTAMP() ); CREATE TABLE `tag` ( `tag_id` int(11) NOT NULL AUTO_INCREMENT, `tag_name` char(40) NOT NULL DEFAULT '' COMMENT '標簽名', PRIMARY KEY (`tag_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='標簽表'; INSERT INTO tag VALUES (1, 'PHP'), (2, 'ruby'), (3, 'mysql'), (4, 'database'); CREATE TABLE `tag_book` ( `tag_id` int(11) NOT NULL DEFAULT '0' COMMENT '標簽ID', `book_id` int(11) NOT NULL DEFAULT '0' COMMENT '書ID', KEY `tag_id` (`tag_id`), KEY `book_id` (`book_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='標簽與書關系表'; INSERT INTO `tag_book` (`tag_id`, `book_id`) VALUES ('4', '7'),('1', '5'),('2', '6'),('2', '8'); ``` 我們有以下查詢需求: ```sql # 《mysql運維》有幾個標簽: SELECT tag_name FROM `book` AS b INNER JOIN tag_book AS tb ON b.book_id = tb.book_id INNER JOIN tag AS t ON tb.tag_id = t.tag_id WHERE `name` = 'mysql運維'; # 標簽ruby下有幾本書: SELECT b.name FROM `book` AS b INNER JOIN tag_book AS tb ON b.book_id = tb.book_id INNER JOIN tag AS t ON tb.tag_id = t.tag_id WHERE t.`tag_name` = 'ruby'; ``` 換到redis中,我們可以如下操作: 一個標簽下面可以包含很多書籍,一個書籍也可以包含很多標簽。這種從屬關系如果沒有排序需求的,我們可以使用集合: 1. 可以準確表達從屬關系,一個標簽PHP的集合下面有:哪些書籍(存ID就可以了) 2. 集合不僅可以方便CURD,還可以求并集交集等 ``` set book:book_id:5:name 'PHP圣經' set book:book_id:6:name 'ruby實戰' set book:book_id:7:name 'mysql運維' set book:book_id:8:name 'ruby服務端編程' sadd tag:tag_name:php:book_id 5 sadd tag:tag_name:ruby:book_id 6 8 sadd tag:tag_name:database:book_id 7 sadd tag:tag_name:mysql:book_id 7 # ruby下面有哪些書 127.0.0.1:6379> sort tag:tag_name:ruby:book_id get book:book_id:*:name ruby實戰 ruby服務端編程 # 標簽同時包含mysql,與database的書 【取交集】 127.0.0.1:6379> sinter tag:tag_name:database:book_id tag:tag_name:mysql:book_id 7 # 在根據book:book_id:7:name獲得書籍名稱,但如果返回的數據量大,可以先添加一個store參數存到一個臨時集合里,然后再用sort分頁取回; # 查所有的PHP以及mysql的書;【取并集】 127.0.0.1:6379> sunion tag:tag_name:php:book_id tag:tag_name:mysql:book_id 5 7 set book:book_id:9:name 'javascript權威指南' set book:book_id:10:name 'HTML+CSS' sadd tag:tag_name:web:book_id 5 9 10 #查web標簽中的非PHP書籍 127.0.0.1:6379> sdiff tag:tag_name:web:book_id tag:tag_name:php:book_id 9 10 ``` ### 總結如下: 1. 表達從屬關系(一對多,多對多),最好用集合; 比如: 書名和標簽,關注與被關注(微博粉絲關系)等等。 2. 求最近的,一般利用鏈表后入后出的特性。比如:最近N個登錄的用戶,可以維護一個登錄的鏈表,控制他的長度,使得里面永遠保存的是最近的N個登錄用戶。 3. 對于排序,積分榜這類需求,可以用有序集合,比如:我們把用戶和登錄次數統一存儲在一個sorted set里,然后就可以求出登錄次數最多用戶。 4. 對于大數據量的非是即否關系,還可以通過位圖(setbit)的方式,比如:1億個用戶, 每個用戶 登陸/做任意操作,記為今天活躍,否則記為不活躍;(每天一個位圖來記錄,會員id就是位圖的位置); ### mysql導出數據到redis http://ju.outofmemory.cn/entry/28047 http://www.cnblogs.com/kgdxpr/p/3643672.html [1]: http://static.zybuluo.com/a5635268/d09cw6x4mkt4k2nmpsxyzz0n/key%E8%AE%BE%E8%AE%A1%E6%8A%80%E5%B7%A7.jpg
                  <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>

                              哎呀哎呀视频在线观看