走得最慢的人,只要他不丧失目标,也比漫无目的的徘徊的人走得快。— 莱辛
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
|