【Database】Redis的初步学习

(0) redis 安装和卸载

    安装: apt-get install redis-server

    卸载: 

        a. apt-get remove redis-server

        b. apt-get remove redis-tools

       c.  find / -name redis 把找到的redis目录都删除了

(1) Redis特点(引用百度百科)

        redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

        redis的命令关键字是不区分大小写的,但是key和value是区分的

(2)关于VM(virtual memory)

    在以前的旧版本里头,redis有vm这个概念的。设置了vm就是把key对应的value交换到磁盘里,这样可以节省很多空间。但是为了查找方法,key是不会交换出磁盘的。查找的时候,如果对应key的value在磁盘,就从磁盘里拉到内存中。如果value的size很大,key很小,那么这种方法时还不错的。但是如果key和value都很小,那么这种方式不太好。目前VM已经被废弃了,在新版中不再使用。关于vm的讨论可以看 官网的文章 https://redis.io/topics/virtual-memory

    因为内存是有限的,如果数据非常多(例如微博的数据),全部放在内存显然不现实。因此仅仅用redis不能满足要求,虽然redis可以更新到磁盘,毕竟全部数据在内存中,内存不足,严重影响性能。因此持久化工作通常交给其他数据库。

    关于把redis当中缓存,允许数据丢失(因为由其他数据库做保存数据),可以使用回收策略。详见:https://redis.io/topics/lru-cache

(3)Redis和其他数据库协同工作

    写入数据时,先写入常规数据库,保证实时更新,接着更新到redis;访问数据时,先从redis读取,如果key不在redis,那么就从常规数据库读取,顺带更新到redis。

(4)Redis数据刷新

    刚刚所说,redis的数据都放在内存了,随着时间增加,redis的数据太多了,就会造成内存不足。因此需要给redis的数据设置一个超时的概念。超过一定时间后,让redis的数据自动delete。

设置redis超时的命令如下。

EXPIRE key seconds
EXPIREAT key timestamp
PEXPIRE key milliseconds
PEXPIREAT key milliseconds-timestamp 

当然expire在如下操作后会失效,就是说不会再超时。

The timeout will only be cleared by commands that delete or overwrite the contents of the key, including DELSETGETSET and all the *STOREcommands. 

(5)redis的C接口。

    官网介绍了很多redis各个语言的接口,具体连接如下: https://redis.io/clients

    针对c/c++接口,目前使用过hiredis,感觉还不错。

    默认使用IP + PORT就可以连接redis-server。当然也可以通过unix套接字进行连接,需要设置unixsocket这个配置。当使用如下命令配置时,一直提示错误。

127.0.0.1:6379> CONFIG SET unixsocket /var/run/redis/redis.sock
(error) ERR Unsupported CONFIG parameter: unixsocket

   怒了,直接去修改redis.conf文件,通过命令查看,修改成功。

127.0.0.1:6379> CONFIG GET unixsocket
1) "unixsocket"
2) "/var/run/redis/redis.sock"

 在hiredis使用如下接口就可以连接了。

c = redisConnectUnix("/var/run/redis/redis.sock");


猜你喜欢

转载自blog.csdn.net/dyingfair/article/details/80616715