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。
如果使用lpush往列表中添加cofield,则列表为:
如果使用rpush往列表中添加cofield,则列表为:mike、john、joy、cofield。
获取某个范围的值: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]