redis-安装

redis

特点

  1. redis为内存数据库,数据存储在内存中,访问速度快

  2. redis为key-value的键值对,数据结构比较简单

  3. 可实现数据的持久化,保证数据不会丢失

安装&运行

  1. archlinux安装

    1
    sudo pacman -S redis

    运行

    1
    2
    sudo systemctl start redis
    redis # 客户端
  1. raspberrypi 安装

    1
    sudo apt-get install redis-server

    运行

    1
    2
    sudo systemctl start redis
    redis-cli
  1. docker安装

    1
    sudo docker pull redis

    运行

    1
    2
    sudo docker run --name redis -p 6379:6379 -d redis
    sudo docker exec -it redis redis-cli

关闭redis服务

如果已经给数据库中插入数据,那么正确的关闭方法是在客户端使用shutdown来关闭redis服务,这样数据才会同步到硬盘中,否则有可能丢失

在redis的配置中可以查看到默认的同步策略:

1
2
3
save 900 1 # 1条数据的变动会在900s后同步硬盘
save 300 10 # 10条数据的变动会在300s后同步硬盘
save 60 10000 # 10000条数据的变动会在60s后同步硬盘

可以看出数据并不是实时同步的,只有到了一定时间才会保存到硬盘中

主要配置

配置文件:/etc/redis/redis.conf

随想

虽然说现在也不算很懂,但是很久之前发生的事我还记忆尤新。那是我入职不久发生的一件事,有个同事在我后入职的,大概28岁左右,主要是做技术方面的。当时他就需要给我们讲redis,zookeeper这些。当时大家讨论的很多,那个同事估计也没想到会问那么多深奥的问题。总之呢,我是没听懂,也不知道这个键值对的内存数据库是如何存储数据的。因为在oracle或者mysql中不是会有database,table这些吗,而且每个表还有那么多的字段,一个key-value怎么存储这么多东西?

就拿oracle中的一条记录来说,可以拿出一个字段作为key,那么其他的字段都作为value吗,就当做字符串来存储吗?那么查询效率怎么会提升,而且也很混乱啊。总不可能把一条记录拆分了吧,那数据量也太大了。如果拿不同表的多条数据的话,如果没有表,全是数据,那么数据量不是很庞大,又如何区分?

学了一些redis后才明白,原来这个key不是简单的作为标识符的key,这个key的写法就可以看出分级类别。这个value不是简单的value,这个value可以是hash,hash会有许多的键值对来存储类似oracle中的字段,值。而且hash查询速度快,还有特定的方法来获取hash中的特定的key(字段)。所以key的作用为索引以及分类,value可以使用hash来存储对象(一条记录)。