10

随想录(redis的学习和使用)

 3 years ago
source link: https://feixiaoxing.blog.csdn.net/article/details/111460352
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

    很早就听说过redis,但是却没有好好使用过。记得读书的时候,大家用的比较多的是微软的access和sql server。等到2009年毕业的时候,linux开始流行起来,mysql使用的越来越多。后来,也就是2010以后,redis这种key-value的内存数据库也开始被大规模的使用。当然,redis的流行有很多原因,速度的优化、内存的扩大、内存条成本降低,这些都是促成redis流行的原因。

1、下载redis

wget http://download.redis.io/releases/redis-6.0.8.tar.gz

2、代码编译

tar xzvf redis-6.0.8.tar.gz
cd src
make

    如果遇到编译错误,安装pkgconf即可,

sudo apt-get install pkgconf

3、最主要的工具

./redis-cli
./redis-server

4、判断数据库有没有连上

ping

5、设置数据

set
get

6、订阅机制

publish
subscribe

7、保存和加载

save
bgsave

8、过期时间

expire

9、选中数据库和清空数据库

select
flushdb

10、平台支持

    同时支持linux和win32平台

11、redis和mysql配合

    熟悉redis的朋友都知道,redis要比mysql快很多,这主要是因为redis的数据都是保存在内存里面,没有外设io操作。因此可以把redis看成是mysql的一层缓存。

mysql转换成redis数据,最简单的方法就是用table+id作为key,value1+value2+…value n作为一个完整的value即可。

以读为例,需要读数据的时候,首先检查redis有没有对应的数据,如果有,读redis;如果没有,需要读mysql的同时,加载到redis数据库。这非常重要。

以写为例,需要写数据的时候,分别写入redis和mysql即可。如果redis有数据,直接写入redis,同时写到一个mysql的独立操作线程里面即可,不需要等操作完成再返回。如果没有,那么等独立操作线程所有操作结束后,从mysql读数据,写入redis,更改redis,再继续向独立操作线程发送操作指令,显得稍微复杂点。上面等待独立线程操作结束的动作,主要是为了防止操作队列有数据删除动作,或者key过期时间很短,造成操作队列还没有执行完,这样对会对后面的mysql写入造成影响。

因为我们时刻要牢记,redis数据有可能被多个客户端程序访问,也就是读写可能同时发生,所以一定要考虑redis和mysql的一致性问题。这种情况,或许变成串行化访问,也就是有一个总的数据处理thread,统一负责redis和mysql的同步工作比较好,使用rpc协议就能完成。

另外一点就是,在发生程序异常的时候,一定要确保独立写进程都操作完毕。当然,有的时候为了验证的需要,需要save一下redis数据。

12、参考资料

    可以参考这个redis教程,使用还是很方便的。

13、代码阅读的价值

    本身redis作为cache使用的,就像cpu里面的icache、dcache一样。另外一方面,redis的代码比较简练,非常适合拿来进行学习,特别是早期的版本,比如2.2版本,很适合拿来看一看,读一读。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK