目录
一、Redis 介绍
以下总结了关于Redis比较全面的知识笔记以及面试题,方便自己复习的同时希望对大家有所帮助。
1、Redis 简介
Remote Dictionary Server(Redis)是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map),列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
2、Redis 的特点
(1) 支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash 表)、set(集合)、zset(排序 set)、hyperloglog(基数估算)
(2)支持持久化操作,可以进行 aof 及 rdb 数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。
(3)支持通过 Replication 进行数据复制,通过 master-slave 机制,可以实时进行数据的
同步复制,支持多级复制和增量复制,master-slave 机制是 Redis 进行 HA 的重要手段。
(4)单进程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。
二、安装 Redis 单机版
本次是在Linux环境下安装Redis,如果没有安装Linux,请安装一下,教程点这里。
本次介绍的Redis版本为:redis-3.0.0.tar.gz
redis 的版本:副版本号奇数版本号是测试版,不建议在生产环境中使用。偶数版本时稳定版建议在生产环境中使用。
3.0 版本更新比较大。集成了集群技术
下载链接在这里:
链接:https://pan.baidu.com/s/1M5Vgh0Ev4PfUka5rq_NdeQ
提取码:qljm
1、安装gcc
需要在 linux 系统中安装 gcc,命令为:
yum install -y gcc-c++
2、上传Redis并且解压
我们在root目录下的temp文件夹中上传并且解压Redis。
如果不熟悉上传和基本命令,就去点击这里学习文件上传,基本命令在这片文章的上一节。
解压命令
tar -zxf redis-3.0.0.tar.gz
3、编译、安装Redis
解压完毕之后我们进入到解压后的Redis目录下,使用make命令对redis进行编译,编译成功之后,在redis的根目录下在执行安装命令进行安装。
编译命令 make
安装命令 make install PREFIX=/usr/local/redis
意思就是安装在后面给定参数的目录下,没有这个目录就自动创建。
执行完毕之后进入到安装目录的bin目录下。
出现上图就编译成功了。。。。进行下一步安装
安装成功之后如下所示:
4、启动Redis
Redis的启动分为前端启动和后端启动。
4.1、前端启动
去redis的安装目录的bin 目录下执行命令:
cd /usr/local/redis/bin
./redis-server 启动redis
(ctrl+c)退出 redis
启动成功会看见一个Redis的图标。
4.2、后端启动
停止Redis,我们发现在前端启动不太方便,无法写其他命令,因此我们得修改一下启动方式,将启动方式改为后端启动。
进入到解压后的Redis目录下,进行以下操作:
(1)先将 redis 解压目录下的 redis.conf 文件拷贝到 安装好的 redis 的 bin 目录下
cd /root/temp/redis-3.0.0
命令:cp redis.conf /usr/local/redis/bin
(2)修改拷贝过来的 redis.conf 配置文件
进入到cd /usr/local/redis/bin
命令:vim redis.conf
将里面的daemonize的no 改为 yes
然后保存退出
(3)再次启动 redis
在 bin 目录下执行命令:
./redis-server redis.conf
(4)查看 redis 启动是否成功
输入命令:ps aux|grep redis
如果过启动成功了,那么Redis的线程就会如上图所示。
(5)测试 redis
在 bin 目录下启动 redis 自带的客户端
./redis-cli
常见 redis 命令:
ping--->pong
Ctrl+C退出
(6)关闭 redis 的命令
./redis-cli shutdown
三、Redis数据类型介绍
1、String( 字符串)
Redis 字符串是字节序列。Redis 字符串是二进制安全的,这意味着他们有一个已知的长度没有任何特殊字符终止,所以你可以存储任何东西,512 兆为上限
示例:
redis 127.0.0.1:6379> SET name kevin
OK
redis 127.0.0.1:6379> GET name
"kevin"
(1)incr: 让当前键值以 1 的数量递增,并返回递增后的值
(2)incrby: 可以指定参数一次增加的数值,并返回递增后的值,(原来的num是2,加10之后变为12)
(3)decr: 让当前键值以 1 的数量递减 并返回递减后的值
(4)decrby: 可以指定参数一次递减的数值,并返回递减后的值
(5)incrbyfloat: 可以递增一个双精度浮点数
以上三种方法和上面相加递增是一样的用法。
(6)append: 作用是向键值的末尾追加 value。如果键不存在则将该键的值设置为 value。返回值是追加后字符串的总长度。
(7)mget/mset作用与 get/set 相似,不过 mget/mset 可以同时获得/设置多个键的键值。这两个方法是批量设置和获取键值对。
(8)del :根据 key 来删除 value
(9)flushdb: 清除当前库的所有数据
2、Hash(hash 表)
Redis 的哈希是键值对的集合。
Redis 的哈希值是字符串字段和字符串值之间的映射,因此它们被用来表示对象
示例:
redis 127.0.0.1:6379> HSET key field value
OK
redis 127.0.0.1:6379> HGET key field
value
(1)hset: 存储一个哈希键值对的集合
基本格式: hset key field value -----表示的是在key的field下设置一个为“value”的值。
(2)hget:获取一个哈希键的值
基本格式:hget key field
(3)hmset: 存储一个或多个哈希是键值对的集合
基本格式:hmset key field1 value1 …fieldN keyN
(4)hmget: 获取多个指定的键的值
基本格式:hmget key field1 … fieldN
(5)hexists:判断哈希表中的字段名是否存在,如果存在返回 1 ,否则返回 0
基本格式: hexists key field
(6)hdel: 删除一个或多个字段
基本格式:hdel key field
(7)hgetall:获取一个哈希是键值对的集合
基本格式:hgetall key
(8)hvals: 只返回字段值
基本格式:hvals key
(9)hkeys: 只返回字段名
基本格式: hkeys key
(10)hlen: 返回 key 的 hash 的元素个数
基本格式: hlen key
这里是因为user下有两个属性 username和userage
3、List( 链表)
Redis 的链表是简单的字符串列表,排序插入顺序。您可以添加元素到 Redis 的列表的头部或尾部
Lpush:表示的是向链表的左添加,也就是向链表的头添加;
Rpush:表示的是向链表的右添加,也就是向链表的尾添加;
示例:
redis 127.0.0.1:6379> lpush tutoriallist redis
(integer) 1
redis 127.0.0.1:6379> lpush tutoriallist mongodb
(integer) 2
redis 127.0.0.1:6379> lpush tutoriallist rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange tutoriallist 0 10
1) "rabitmq"
2) "mongodb"
3) "redis
拿以上的前三句来解释:
- 执行第一句的时候,相当于在图中最左边的第一个Value处添加了redis;
- 执行第二句的时候,首先将最左边第一个Value原有的值移到第二个Value处,然后再在第一个Value处添加了mongodb;
- 执行第三句的时候,首先源有的值会往右顺推一个Value,然后在第一个Value出添加了rabitmq,相当于就是左添加。所以执行第四句遍历的时候,从左往右遍历出来的顺序就是那样了。
注意:
Lpush:表示的是向链表的左添加,也就是向链表的头添加;
Rpush:表示的是向链表的右添加,也就是向链表的尾添加;
如果第五句执行(rpush tutoriallist java),那么就是在redis的后面。也就是第四个Value处添加了java。
(1)lpush key value: 向链表左侧添加
(2)rpush key value: 向链表右侧添加
(3)lpop key: 从左边移出一个元素
就是从最左边的那个节点剔除掉。
(4)rpop key: 从右边移出一个元素
就是从最右边的那个节点剔除掉。
(5)llen key: 返回链表中元素的个数 相当于关系型数据库中 select count(*)
(6)lrange key start end lrange: 命令将返回索引从 start 到 stop 之间的所有元素。Redis 的列表起始索引为 0。
lrange也支持负索引 lrange nn -2 -1
如:-1 表示最右边第一个元素 ,-2 表示最右边第二个元素,依次类推。
(7)lindex key indexnumber如果要将列表类型当做数组来用,lindex 命令是必不可少的。
lindex 命令用来返回指定索引的元素,索引从 0 开始,如果是负数表示从右边开始计算的索引,最右边元素的索引是-1。
(8)lset key indexnumber value: 是另一个通过索引操作列表的命令,它会将索引为 index的元素赋值为 value,原来的值会被覆盖。
4、Set( 集合)
Redis 的集合是字符串的无序集合。
在Set集合当中,是不允许有重复的。
示例:
redis 127.0.0.1:6379> sadd tutoriallist redis
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist mongodb
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers tutoriallist
1) "rabitmq"
2) "mongodb"
3) "redis"
(1)sadd key value:
添加一个 string 元素到,key 对应的 set 集合中,
成功返回 1,如果元素已经在集合中返回 0
(2)scard key: 返回 set 的元素个数,如果 set 是空或者 key 不存在返回 0
(3)smembers key: 返回 key 对应 set 的所有元素,结果是无序的
但是不保证有序。
(4)sismember key value: 判断 value 是否在 set 中,存在返回 1,0 表示不存在或者 key 不存在
(5)srem key value:
从 key 对应 set 中移除给定元素,成功返回 1,
如果 value 在集合中不存在或者 key 不存在返回 0
5、SortedSet( 有序集合)zset
Redis 的有序集合类似于 Redis 的集合,字符串不重复的集合。
示例:
redis 127.0.0.1:6379> zadd tutoriallist 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE tutoriallist 0 1000
1) "redis"
2) "mongodb"
3) "rabitmq"
(1)zadd key score value: 将一个或多个 value 及其 socre 加入到 set 中
**(2)zrange key start end **:0 和-1 表示从索引为 0 的元素到最后一个元素(同 LRANGE 命令相似)
**(3)zrange key 0 -1 withscores **
也可以连同 score 一块输出,使用 WITHSCORES 参数
(4)zremrangebyscore key start end: 可用于范围删除操作
这里只介绍了5种数据类型,后面会持续更新。。。
上一篇学习:学习笔记之
下一篇学习:学习笔记之Redis学习(二)