redis生产问题,redis分析
二。建筑设计2.1。相关命令:scache.create:新建一条缓存信息,缓存通过指定的mysql地址信息维护一条与mysql的连接信息;Scache.list:遍历所有创建的缓存信息(返回缓存信息标记);Scache.info:获取指定的缓存信息(缓存信息存储在链表中,数据量大时访问可能会有性能瓶颈);
Scache.test:验证特定缓存信息与mysql的连接是否ok(缓存信息存储在链表中,有大量数据时访问可能出现性能瓶颈);
Scache.flush:暂时不支持;
Scache.delete:删除指定的缓存信息,断开与mysql的连接;
Scache.getvalue:从缓存中获取相应的值;
Scache.getmeta:从缓存中获取对应值的属性;
2.2.数据结构
//缓存对象的结构
typedef结构CacheDetails_s {
char * cachename//设置的缓存名称是独立的缓存标识符。
uint16 _ t ttl//值过期前的默认生存期(秒)
char * dbhost//数据库服务器的主机IP地址或DNS名称
uint16 _ t dbport//port数据库服务器的TCP端口(通常为3306)
char * dbname//需要连接的数据库的名称
char * dbuser//连接到数据库的用户的登录名
char * dbpass//Password连接到数据库的密码
MYSQL * dbhandle//连接mysql的句柄
struct CacheDetails _ s * next//记录下一个缓存的对象
} CacheDetails三、数据缓存读取过程
3.1.数据缓存过程
相关函数:SCachePopulate,主要过程如下:
向对应的mysql发送查询命令(调用mysql_query接口),接受返回的结果(异常直接返回);
两个缓存信息键,cachename:query:meta和cache name:query:value;
解析mysql的返回值并将数据存储在两个键中:
将返回结果的每个字段及其属性存储在cache name:Query:Meta:
RPUSH cache name:query:meta name type
nametype将返回结果的每一行数据依次存储在cachename:query:value中:
相关命令:r push cache name:query:value field 1 field 2 field 3;
的数据格式:即field1field2field3的内容是由mysql返回的一行中每一列的数据拼接而成的字符串,分隔符为;
3.2.数据读取过程
Scache.getvalue执行流程:
拼接特殊键,格式为:cachename:query:value(其中cachename和query是命令中传递的参数);
在本地数据库中执行l range cache name:query:value 0-1获取所有数据;
如果数据为空,则调用SCachePopulate函数填充数据,然后再次执行L Range cache name:query:value 0-1获取数据;
最后的数据是field1field2field3数据的数组(类似于sql指令的多行返回值);
Scache.getmeta执行过程:
拼接特殊键,格式为:cachename:query:meta(其中cachename和query是命令中传递的参数);
在本地数据库中执行lrange cache name:query:meta 0-1以获取所有数据;
如果数据为空,则调用SCachePopulate函数填充数据,然后再次执行L Range cache name:Query:meta 0-1获取数据;
最后的数据是nametype数据的数组(类似于sql指令返回值对应的每一列的属性信息);
四。问题和想法
4.1.问题
SCacheCreate_ThreadMain
scache.flush
版权归作者所有:原创作品来自博主小二上九8,转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。