Redis是一种NoSQL数据库,NoSQL的意思是不仅仅可以使用关系型数据库,由于关系型数据库的数据是存储在文件中,每次操作都是IO操作,而文件的IO操作又是比较缓慢的,NoSQL打破了原先一个表对应表字段,然后再存储数据的方式,将数据以特殊的方式存储,对程序运行效率有显著的提升 目前市面上常见的NoSQL有以下几种:
NoSQL | 描述 |
---|---|
memcached | 内存型数据库,所有数据存储于内存中,以键值对形式存放 |
Redis | 内存型数据库,还具备持久化能力,代价是性能有所降低 |
HBase | 以列作为存储 |
MongoDB | 以Document作存储 |
一、Redis安装与启动
安装可以直接使用yum
:
yum install epel-release
yum install redis
由于下面需要模拟多台Redis服务器,需要复制多份Redis,yum
方式会直接安装到/usr/bin
目录,不方便复制,所以我们以手动编译的方式
1. 安装Redis
Redis使用c语言编写,所以编译需要使用c的编译工具:
代码语言:javascript复制yum install -y gcc-c automake autoconf libtool make tcl
官网文档:https://redis.io/docs/getting-started/installation/install-redis-from-source/
代码语言:javascript复制wget https://download.redis.io/redis-stable.tar.gz
tar -xzvf redis-stable.tar.gz
cd redis-stable
make
指定Redis安装到/usr/local/redis
目录
make install PREFIX=/usr/local/redis
官网首页上也可以下载到编译完的压缩包
2. 配置Redis
回到你解压出Redis的目录,里面有个redis.conf
文件,将它拷贝一份到Redis安装目录/usr/local/redis
下
cp ./redis.conf /usr/local/redis/bin/
修改配置文件中下面的选项:
代码语言:javascript复制# 后台方式启动
daemonize yes
# 注释下面bind配置
# bind 127.0.0.1 -::1
# 允许外部访问
protected-mode no
3. 启动Redis
启动时指定使用配置文件
代码语言:javascript复制./redis-server redis.conf
二、Redis数据类型
Redis常用五大类型:
类型 | 描述 | 使用场景 |
---|---|---|
string | key-value形式存储,是redis最基本的类型,最大存储512MB | 所有key-value形式的存储 |
hash | key-field-value形式存储,一个key可以对应多个field | 存储对象 |
list | 有序的字符串列表 | 消息队列、列表 |
set | 无序集合,内部无重复值,和Java中的HashSet类似 | 去重、判断是否存在集合中 |
zset | 除了set的特性外,还具有优先级,按照优先级排序,默认优先级为插入顺序 | 排行榜 |
三、Redis常用命令
官网文档:https://www.redis.net.cn/order/
下面使用Redis的客户端,来简单使用下命令
代码语言:javascript复制./redis-cli
1. 操作string
1.1 set
设置key-value:
代码语言:javascript复制set name zhangsan
返回:OK
1.2 get
获取key对应的value:
代码语言:javascript复制get name
返回:value值
1.3 setnx
设置key-value,且仅当key不存在时:
代码语言:javascript复制setnx name lisi
返回:改变数
1.4 setex
设置key-value,并指定过期时间:
代码语言:javascript复制setex name 3 lisi
返回:OK
2. 操作key
2.1 exists
判断key是否存在:
代码语言:javascript复制exists name
返回:不存在返回0,存在返回1
2.2 expire
为key设置过期时间,单位秒:
代码语言:javascript复制expire name 5
返回:成功 1 失败 0
2.3 ttl
查看key过期剩余时间:
代码语言:javascript复制ttl name
返回:过期 -2、永不过期 -1、没过期 剩余时间
2.4 del
删除key对应的key-value:
代码语言:javascript复制del name
返回:成功 1 失败 0
3. 操作hash
3.1 hset
设置key-field-value:
代码语言:javascript复制hset person name zhangsan
hset person age 18
返回:成功 1 失败 0
3.2 hget
获取key中field对应的值:
代码语言:javascript复制hget person name
返回:value值
3.3 hmset
一次性设置多个field-value:
代码语言:javascript复制hmset person address beijing gender man
返回:成功 OK
3.4 hmget
一次性获取多个field的值:
代码语言:javascript复制hmget person address gender
返回:多个value值
3.5 hvals
获取所有value值:
代码语言:javascript复制hvals person
返回:多个value值
3.6 hgetall
获取所有field和value:
代码语言:javascript复制hgetall person
返回:多个field和value值
4. 操作list
4.1 rpush
向一个列表末尾中插入一个或多个值,如果列表不存在,则创建
代码语言:javascript复制rpush list a b c
返回:成功 列表中元素数
4.2 lpush
向一个列表头中插入一个或多个值,如果列表不存在,则创建
代码语言:javascript复制lpush list d e f
返回:成功 列表中元素数
4.3 lrange
返回列表中指定区间内的值,可以用-1代表末尾
代码语言:javascript复制lrange list 0 -1
返回:查询到的值
4.4 llen
获取列表长度
代码语言:javascript复制llen list
返回:列表长度
4.5 lrem
删除列表中的指定个数的指定value,个数为正,从左往右删除,为负,从右往左删除
代码语言:javascript复制lrem list 2 f
返回:删除数量
5. 操作set
5.1 sadd
将一个或多个值插入集合中,重复元素不生效,如果集合不存在,则创建
代码语言:javascript复制sadd blacks a b c
返回:插入数
5.2 scard
返回集合元素数量
代码语言:javascript复制scard blacks
返回:集合元素数量
5.3 smembers
返回集合中的元素
代码语言:javascript复制smembers blacks
返回:集合中所有元素
6. 操作zset
6.1 zadd
向有序集合中添加分数和数据,集合不存在,则创建
代码语言:javascript复制zadd rank 10 xiaoming 20 xiaohei
返回:插入数
6.2 zrange
获取指定区间的集合内容,withscores表示带有分数
代码语言:javascript复制zrange rank 0 -1
zrange rank 0 -1 withscores
返回:集合内容