redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。

它是一个内存型数据库,所有的数据都存在内存中,一旦断电会丢失所有数据。所以它必须要持久化,将数据写入磁盘中。

首先,只需要知道有这些知识点,不需要强迫自己记忆,多练习就好。

安装:

直接下载目前最新的6.0.3 版本,下载地址:

http://download.redis.io/releases/redis-6.0.3.tar.gz
$ wget http://download.redis.io/releases/redis-6.0.3.tar.gz$ tar zxvf redis-6.0.3.tar.gz$ cd redis-6.0.3$ make$ sudo make install

默认安装到/usr/local/bin/目录。在/usr/local/bin/目录下redis-server 是服务器程序,redis-cli 是客户端程序。

可以使用ln -s 软链接,将目标文件链接到你想要的位置。

ln -s /usr/local/bin/redis-server ~ln -s /usr/local/bin/redis-cli ~

启动redis: 直接在/usr/local/bin/下,输入./redis-server启动。此时默认加载redis.conf。如果你想使用自定义的conf,那么就在命令后添加自定义文件名。

关闭redis:可以使用 ./redis-cli shutdown。也可以在进入redis后使用shutdown。

持久化:save。

  • 字符串类型

SET key value

GET key

例子:

set key hello

get key

  • 递增数字

INCR num

  • 增加指定的整数

INCRBY key increment

INCRBY bar 2

  • 递减数字

DECR key

  • 减少指定的整数

DECRBY key decrement

  • 增加指定浮点数

INCRBYFLOAT key increment

  • 向尾部追加值

APPEND key value

  • 获取字符串长度

STRLEN key

  • 位操作

GETBIT key offset

setbit key offset [start] [end]

BITCOUNT key [start] [end]

BITOP operation destkey key1 key2 ....

其中位操作是指实际存储的数据的位。

例如:set alphabet A,A的ASCII码是67。实际的值是0010 0011。那么使用setbit alphabet 5 1,其ASCII码为0010 0111。则alphabet的值为“E”。

  • 哈希(hash)类型

一种以存储键值对的形式字典结构(key-value)。

哈希类型适合存储对象;使用对象类别和ID构成键名,使用字段表示独享的属性。而字段存储属性值。

hset key field value field  value2  field3 value3 这条语句等价于hmset key field value field  value2  field3 value3

例如一扫地机器人, 可以称它为ROBOT:1, 它的功能(function)为清洁(cleaning),它的名称(name)为joy。价格(price)为200元。

那么就可以这样使用语句:

hset ROBOT:1    function  cleaning name joy  price 200

hgetall key 获取某个哈希的所有类型的字段以及字段对应的值。

HSET的命令不需要区分插入和更新操作。所以修改数据之前不需要判断字段是否存在。

  • 列表类型

列表类型可以存储一个有序的字符串列表,常用的操作是向队列两端添加元素,或者获取某个列表内某个范围的值。

向列表中左边添加一个元素。lpush key1 value2  key2 value2  .....向列表中右边添加一个元素。rpush key1 value2  key2 value2  ....

先假设有三个人: cofield、mike、john、joy。




如何选择vc_redist版本安装 vc redis_vc++6.0获取磁盘基本信息


如果使用lpush往列表中添加cofield,则列表为:


如何选择vc_redist版本安装 vc redis_数据_02


如果使用rpush往列表中添加cofield,则列表为:mike、john、joy、cofield。


如何选择vc_redist版本安装 vc redis_数据_03


获取某个范围的值:zrange key start end

下标从0开始逐次递增,同时也有另外一种表示方法:最后一个元素下标为-1。从右往左依次递减。

还是以上面的为例。

cofield、mike、john。 下标从0开始。 cofield(0)、mike(1)、john(2)。

使用zrange man 0 2获取cofield、mike、john。

最后一个元素下标为-1。从右往左依次递减。cofield(-3)、mike(-2)、john(-1)。

使用zrange man -3 -1获取cofield、mike、john。

集合类型:

增加/删除元素

sadd key member

srem key member

获取集合中所有的元素

smember key

判断元素是否在集合中

sismember key value 该时间复杂度为O(1)。

集合间运算

SDIFF 差

SINTER 交

SUNION 并

获取集合中元素个数

scard key

进行集合运算并将结果存储

sdiffstore 进行差运算后存储

sinterstore 进行交运算后存储

sunionstore 进行并运算后存储

随机获得集合中的元素

srandmember key[count] count 为可选,不填默认为1.

从集合中弹出一个元素

stop key 从无集合中随机选择一个元素弹出。

有序集合:

底层是由哈希表和跳表实现。

增加元素

zadd key score value

key为集合名 score为在该集合中的分数。

获取元素的分数

zscore key value

获取排名在某个范围内的元素列表。 时间复杂度为O(log n + m)

zrange key begin end [WITHSCORES] WITHSCORES为可选, 带上此选项,返回数据格式为元素1,分数1;元素2,分数2。。。。。。 (从小到大)

zrevrange key begin end [WITHSCORES] 从大到小

获取指定分数范围的元素。

zrange by score key min max[WITHSCORES] [LIMIT OFFSET COUNT]