redis使用總結

來源:互聯網
上載者:User

標籤:

 

一、利用redis快取資料建立與mysql一致的資料

先示範下實現mysql表中與redis資料統一的效果,看一下mysql中資料結構設計和redis有些什麼區別

1.有如下兩張資料表

CREATE TABLE `user` (

  `id` int(10) NOT NULL AUTO_INCREMENT,

  `username` varchar(20) NOT NULL COMMENT ‘使用者名稱‘,

  `password` varchar(25) NOT NULL COMMENT ‘密碼‘,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT=‘使用者資訊表‘;

 

CREATE TABLE `archives` (

  `id` int(10) NOT NULL AUTO_INCREMENT,

  `userid` int(10) NOT NULL COMMENT ‘使用者id‘,

  `username` varchar(20) NOT NULL COMMENT ‘發布微博的使用者名稱稱‘,

  `post_time` datetime NOT NULL COMMENT ‘發布時間‘,

  `content` varchar(200) NOT NULL COMMENT ‘微博內容‘,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT=‘使用者發布的微博資訊表‘;

 

2.mysql表資料如下

user表資料如下

mysql> select * from user;

+----+----------+----------+

| id | username | password |

+----+----------+----------+

|  1 | dongzi   | 123456   |

|  2 | lidong   | 123456   |

+----+----------+----------+

 

archives表資料如下

mysql> select * from archives;

+----+--------+----------+---------------------+--------------------------------------------+

| id | userid | username | post_time           | content                                    |

+----+--------+----------+---------------------+--------------------------------------------+

|  1 |      1 | dongzi   | 2016-06-22 16:00:40 | 我是使用者東子,我的第一條微博               |

|  2 |      2 | lidong   | 2016-06-22 16:10:40 | 我是使用者lidong,我的第一條微博             |

|  3 |      2 | lidong   | 2016-06-22 17:05:40 | 我是使用者lidong,我的第二條微博             |

+----+--------+----------+---------------------+--------------------------------------------+

 

3.使用redis增加user表和archives資料

在user表中增加第一個使用者

incr global:user    --讓使用者表id自增,此時id為1,為了實現mysql中的auto_increment

set user:userid:1:username dongzi

set user:userid:1:password 123456

set user:username:dongzi:userid 1 --設定這個key是為了利用使用者名稱來反查使用者id

?

在user表中增加第二個使用者

incr global:user                    --現在返回的值為2              

set user:userid:2:username lidong

set user:userid:2:password 123456

set user:username:lidong:userid 2 --設定這個key是為了利用使用者名稱來反查使用者id

 

發布第一條微博

incr global:archives    ?    ?--記錄archives表的id

hset archives:id:1 userid 1

hset archives:id:1 username dongzi

hset archives:id:1 post_time ‘2016-06-22 16:00:40‘

hset archives:id:1 content ‘我是使用者東子,我的第一條微博‘

lpush archives:userid:1 1 --記錄使用者id發布的所有微博id

 

發布第二條微博

incr global:archives

hset archives:id:2 userid 2

hset archives:id:2 username lidong

hset archives:id:2 post_time ‘2016-06-22 16:14:34‘

hset archives:id:2 content ‘我是使用者lidong,我的第一條微博‘

lpush archives:userid:2 2

 

發布第三微博

incr global:archives

hset archives:id:3 userid 2

hset archives:id:3 username lidong

hset archives:id:3 post_time ‘2016-06-22 17:05:40‘

hset archives:id:3 content ‘我是使用者lidong,我的第二條微博‘

lpush archives:userid:2 3


最終我們使用redis得到了與mysql一致的資料,只是redis中對應關係會有一些區別

 

二、根據具體商務邏輯,合理設定失效時間

 

三、高頻,低頻資料要分離

高頻率查詢的資料存入redis緩衝,低頻資料不要存入redis緩衝

 

四、合理使用redis的資料類型

例如:

1.使用hash類型:

hset archives:id:1 userid 1

hset archives:id:1 username dongzi

我們使用hash類型來儲存,可以達到類似mysql中一條資料中的資訊,這樣redis中每條資訊就只有一個key,能夠大量的減少key的數量

2.使用list類型
lpush archives:userid:2 3
建立一個key,list類型來表示userid為2的所有發布的微博id,這樣就可以將微博id與使用者id綁定了

 

五、盡量使用字串格式
商務邏輯滿足,盡量使用字串格式,讀取時也方便讀取查看

 

六、可以使用incr實現自增id來達到類似mysql的auto_increment功能

例如:

incr global:user 

每次incr一下自增一次,插入新資料的時候帶上這個自增後的id值

 

七、合理設定key的格式

優點:這樣的好處就是方便體現資料之間的關係,有層次化,方便管理。

例如:

set user:userid:2:username lidong
表名放在第一位,使用者id放在第二位,需要查詢的欄位放在第三位,然後使用冒號拼接凸顯出邏輯關係,這個只是根據上面的表設計的,具體商務邏輯具體實現。

 

八、建立一個“冗餘”的key來反查資料
例如:
set user:username:lidong:userid 2
設定這個key是為了利用使用者名稱來反查使用者id,我們知道使用者名稱為lidong就可以知道使用者id為2,相應的就可以擷取使用者id為2的所有資訊

 

redis使用總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.