• redis使用总结


    一、利用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的所有信息

  • 相关阅读:
    12款非常精致的免费 HTML5 & CSS3 网站模板
    Jetstrap 在线构建 Bootstrap 的工具
    Divshot —— 在线的可视化网页设计
    Hello World!
    我的B站主页:https://space.bilibili.com/611212 内有视频题解
    《冒险岛历史》路西德的前世今生
    看错题系列 cf622C C2. Skyscrapers (hard version)
    Codeforces Round #616 (Div. 2) F. Coffee Varieties 交互题
    Codeforces Round #616 (Div. 2) E. Prefix Enlightenment 图论
    Codeforces Round #616 (Div. 2) D. Irreducible Anagrams 找规律
  • 原文地址:https://www.cnblogs.com/lisqiong/p/5607989.html
Copyright © 2020-2023  润新知