走得最慢的人,只要他不丧失目标,也比漫无目的的徘徊的人走得快。— 莱辛
Redis简介
Redis是项目开发中常用的一个基于C语言开发的键值对存储的NoSQL数据库,全称是Remote Dictionary Service。
Redis最常用的功能是缓存,除此之外,在分布式锁、限流等方面也应用广泛。
Redis的特点
- 支持数据持久化
- 支持主从模式的数据备份
- 支持多种不同的数据结构类型之间的映射
- 提供发布订阅功能
- 提供定时器、计数器功能
Redis的安装
下载地址:https://redis.io/download
下载完成后进入下载目录分别执行sudo make 和sudo make install 命令即可完成安装。
  执行 redis-server启动Redis。 
配置后台启动
在redis.conf配置文件中,修改daemonize 参数,设为yes 。  配置完成后重启,此时启动的redis为后台启动。
Docker安装Redis
Docker作为开发的万金油,使用起来非常舒服,所以我更倾向于通过Docker来使用Redis。 对于Docker操作不熟悉的可以看一下之前的文章:Docker容器操作。
执行命令:
docker run --name myredis -p 6379:6379 -d redis --requirepass 123456
--name 表示为容器起别名,-p 6379:6379 表示将容器的6379端口映射到宿主机器的6379端口,-d 表示后台运行,--requirepass 123456 表示设置密码为123456。  执行命令:
docker exec -it myredis /bin/bash
redis-cli -a 123456
然后执行redis命令:
set name jerry
返回OK,成功。 
五种基本数据类型
Redis是一个key-value类型的数据库,在Redis中,所有的key的类型都是字符串,不同的是value数据结构。 Redis中的字符串类似于Java中的StringBuffer,采用分配冗余空间的方式来减少内存的频繁分配。
String
- set :将键key设定为指定的字符串值。
 - get:获取key的value。如果key不存在,返回特殊值nil。如果key的value不是string,返回错误。
 - append:如果 key 存在并且值为字符串,则会把 value 追加到原来值(value)的结尾。 如果 key 不存在,则创建value。
 - bitcount:统计字符串被设为1的bit数。
 - bitop:对一个或多个保存二进制位的字符串 key 进行位元操作,支持 AND 、OR 、NOT 、XOR,并将结果保存到 destkey 上。
 - decr:对key对应的数字做减1操作。如果key不存在,减1前会被置为0。如果key不是数字类型或者不是数字表示则返回错误。支持最大长度为64位有符号的整型数字。
 - decrby:将key对应的数字减去设置的目标值。
 - setbit:设置或者清空key的value(字符串)在offset处的bit值。
 - getbit:返回key对应的string在offset处的bit值。
 - getrange:返回key对应的字符串value的子串。
 - getset:对key进行赋值并返回之前的值。
 - incr:- decr:对key对应的数字做加1操作。如果key不存在,加1前会被置为0。如果key不是数字类型或者不是数字表示则返回错误。支持最大长度为64位有符号的整型数字。
 - incrby:将key对应的数字加上设置的目标值。
 - incrbyfloat:类似于incyby,做浮点型操作。
 - mget:返回所有指定的key的value。对于每个不对应string或者不存在的key,都返回特殊值nil。
 - mset:对应mget,获取多个key的value。
 - setnx: 全称是set if not exist ,如果key不存在value就设置,存在不做操作。
 - setex:对key值设置超时时间,单位为秒。
 - msetnx:setnx的批处理操作。
 - psetex:对key值设置超时时间,单位为毫秒。
 - setrange:覆盖value的指定区间,对应getrange。
 - strlen:返回key的string类型value的长度。如果key对应的非string类型,则返回错误。

List
-
lpush:将所有指定的值插入到存于 key 的列表的头部。如果 key 不存在,在进行 push 操作前会创建一个空列表。 如果 key 对应的值不是list 则返回一个错误。  -
lpushx:和lpush作用一样,但是当key不存在时不做任何操作。  -
lpop:移除并且返回 key 对应的 list 的第一个元素。  -
llen:返回存储在 key 里的list的长度。 如果 key 不存在,返回长度为 0。 如果存储在 key 里的值不是一个list的话,会返回error。  -
rpush:将所有指定的值插入到存于 key 的列表的头部。  -
rpushx:和rpush作用一样,但是当key不存在时不做任何操作。  -
rpop:移除并且返回 key 对应的 list 的最后一个元素。  -
lrange:返回存储在 key 的列表里指定范围内的元素。  -
lindex:返回列表里索引 index的元素。  -
linsert:将value插入目标元素的前面或者后面,提供after和before两个选项。  -
lrem:移除出现过指定count次数的目标元素。对与conut参数,分为三种情况:
- count > 0:从头往尾移除值为 value 的元素。
- count < 0: 从尾往头移除值为 value 的元素。
- count = 0: 移除所有值为 value 的元素。
 -
lset:替换下标index的value,超出范围会返回error。  -
ltrim:修剪列表大小,只包含设定的大小。  -
rpoplpush:将list1表的尾元素弹出,添加到list2表的头部。看名字也可以知道,先执行rpop再执行lpush。  -
blpop、brpop 、brpoplpush:lpop、rpop、rpoplpush对应的阻塞操作,简单的说普通操作时会立即返回结果,即便为空。阻塞操作会在目标时间内弹出元素或者超时后才结束。
Set
- sadd:添加元素到一个 key 中。
 - scard:返回集合的数量。
 - sdiff:返回一个集合(set1)与给定集合(set2、set3)的差集的元素。
 - sdiffstore:作用同sdiff,不同的是结果存储在set1中,若set1存在值,则覆盖其中的值。
 - sinter:返回指定所有的集合的成员的交集。
 - sinterstore:作用同sinter,不同的是结果存储在set3中,若set3存在值,则覆盖其中的值。
 - smember:返回key集合所有的元素。
 - sismember:返回成员 member 是否是存储的集合 key的成员。
 - smove:将set6指定的value移动到set7。
 - spop:移除指定集合的一个或多个元素。
 - srandmember:随机返回key集合中的一个元素。对于参数count,有以下情况:
- count > 0 && count < 集合长度:随机返回count个元素。
- count > 0 && count >= 集合长度:返回全部元素。
- count <0 && |count| < 集合长度:随机返回|count|个元素。
- count <0 && |count| > 集合长度: 随机返回|count|个元素,但是会出现某个元素重复的情况。
 - srem:移除key集合中指定的元素。如果元素不存在则忽略,如果key集合不存在则返回0,如果key的类型不是一个集合则返回错误。
 - sunion:返回给定的多个集合的并集中的所有成员。
 - sunionstore:作用同sunion,不同的是结果存储在set1中,若set1存在值,则覆盖其中的值。

Hash
- hset:设置 key 指定的哈希集中指定字段的值。
 - hget: 返回 key 指定的哈希集中该字段所关联的值。
 - hsetnx:如果不存在key中指定字段的值时则创建,存在时不做操作。
 - strlen:返回hash指定field的value的字符串长度,如果hash或者field不存在,返回0。
 - hvals:返回 key 指定的哈希集中所有字段的值。
 - hdel :移除key中指定的哈希集中指定的域。如果 key 指定的哈希集不存在返回0。
 - hexists:返回hash里面field是否存在。
 - hgetall:返回 key 指定的哈希集中所有的字段和值。
 - hincrby:增加 key 指定的哈希集中指定字段的数值。如果 key 不存在,会创建一个新的哈希集。如果字段不存在,则字段的值在该操作执行前被设置为 0。支持范围为64位有符号整数。
 - hincrbyfloat:hincrby的浮点型操作。
 - hkeys:返回 key 指定的哈希集中所有字段的名字。
 - hlen:返回 key 指定的哈希集包含的字段的数量。
 - hmget:返回 key 指定的哈希集中多个指定字段的值,不存在的字段返回nil。
 - hmset:设置key指定的哈希集中多个指定字段的值。

ZSet
- zadd:将指定的元素添加到有序集合中。格式为score member,score是一个双精度的浮点型数字字符串。
 - zcard:返回key的有序集元素个数。
 - zcount:返回 score 在某一个区间内的元素(包括等于)。
 - zincrby:将key的成员member的score值加上指定增量。
 - zrange:返回集合中的一组元素。withscores表示显示member的score值。
 - zrevrange:zrange的倒序。
 - zscore:返回member的score 值。
 - zrangebyscore:按照 score 的范围返回元素。
 - zrank:返回元素的排名(从小到大)。
 - zrevrank:返回元素的排名(从大到小)。
 - zrem:移除集合中的一个元素。
 - zinterstore:求多个集合的交集,返回结果报存在zset1中。numberkeys(图片中的2)表示给定的求交集的集合个数。
 - zinter:同zinterstore,但是会直接返回结果。
 - zrangebylex:返回指定区间内的成员。min和max必须以
( 或者[ 开头(数学中的开区间和闭区间)。 
key
|