目录
引言
Redis是什么? Remote Dictionary Service(远程字典服务器)
Redis 是一个开源的(BSD许可)的,C语言编写的,高性能的数据结构存储系统,它可以用作数据库,缓存和消息中间件。它基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一。
官方网站:Redis - The Real-time Data Platform
关系型数据库:支持表结构
非关系型数据库:不是以表结构存储数据
NoSQL,指的是 ‘非关系型数据库’, ‘NoSQL有时也称作Not Only SQL的缩写’
NoSQL数据库主要有以下四类,这些类别中的每一个都有其独特的属性和局限性:
基于键值对 key-value类型:Redis, memcached
列存储数据库 Column-oriented Graph: HBase
图形数据库 Graph based: Neo4j
文档型数据库: MongoDB
MongoDB是一个基于分布式文件存储的数据库,主要用来处理大量的文档。
一 Redis的特性
Redis与其他key-value缓存产品有以下三个特点:
1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
3.Redis支持数据的备份,即master-slave模式的数据备份。
二 Redis的安装
以Linux为例:
1.redis官网上下载最新安装包到家目录
Redis 全版本文件地址:Index of /releases/,在其后加上带版本号的包名即可,比如:http://download.redis.io/releases/redis-7.2.4.tar.gz。
通过以下命令下载压缩包
wget http://download.redis.io/releases/redis-7.2.4.tar.gz
2.解压压缩包,然后会在家目录下面生成一个对应文件夹redis-7.2.4。
tar zxvf redis-7.2.4.tar.gz
3.进入到解压后的目录redis-7.2.4中,然后执行下述命令。
cd redis-7.2.4
make
sudo make install
4.进入到utils目录
cd utils
5.接着进入到install_server.sh文件,注释掉下面的内容(大约在77行,有8行,shell的注释是以#进行的注释) 注释之后,保存退出并执行下面命令。
sudo ./install_server.sh
6.之后一直点Enter键
7.检查安装成功后的命令行
redis-cli
# 显示结果如下
127.0.0.1:6739>
ping
# 返回一个PONG
三 Redis的优点
1.性能高 读11w/s 写8.1w/s
2.具有丰富的数据类型(五大数据类型)
3.原子的 操作是原子的,但是redis事务是不支持原子的。
4.丰富的特性,支持发布订阅,通知,支持key过期。
四 Redis的五种数据类型与命令
首先输入 redis-cli
1.string类型
#设置命令
set key value
set k1 100
set k3 300
#获取key值
get k1
get k3
#一次性设置多个值
mset k11 11 k12 12 k13 helloworld k14 12.3
#一次性获取多个值
mget k11 k12 k13 k14
#获取字符串的子串 -1表示倒数第一个
GETRANGE k13 0 1
GETRANGE k13 2 5
GETRANGE k13 0 -1
#设置字符串的字串
SETRANGE k13 0 wu
#在获取的同时进行修改
getset k1 hello
#在设置值的同时 加上过期时间 比如将值设为3000 过期时间20s
setex k1 20 3000
#累加
INCR k1 #每次加1个
INCRBY key + 值 #每次可以增加指定的值
2.list数据类型
# LPUSH key value1 value2... RPUSH key value1 value2...
#将一个或多个值插入到头部 尾部 头插法 尾插法
lpush list1 1 2 3 4 5 6 8 9
rpush list2 3 2 1 4 5 6
#lpop rpop 在列表两侧删除元素
lpop list1
rpop list1
# lrange list1 0 -1 范围查找
lrange list1 0 -1
#lset list1 0 888888 修改左边的值
lset list1 0 888888
#redis中list是支持下标的(与STL中list不一样)
#lindex list1 8 按下标访问
lindex list1 8
#删除重复元素(与STL中list中unique不一样,unique需要进行sort)
#LREM list1 5 1 删除掉5个1
LREM list1 5 1
#LTRIM list1 1 4 把1-4范围的数据留下来了 TRIM进行修剪
LTRIM list1 1 4
#LINSERT list1 before | after 2 200 这里的2是在元素2前面或后面 插入200 并不是下标值
LINSERT list1 before 2 200
3.set数据类型
#添加元素
sadd myset1 1 2 3 1 2 3 4
#scard myset1 显示元素数量
scard myset1
#smembers myset1 显示元素
smembers myset1
#srandmember myset1 number 随机获取number个数
srandmember myset1 3
#spop myset1 number 随机选取number个元素 并删除
spop myset1 1
#SDIFF key1 key2 出现在key1 不出现在key2的元素
SDIFF myset1 myset2
#SINTER key1 key2 求交集
SINTER myset1 myset2
#SUNION key1 key2 求并集
SUNION myset1 myset2
4.sorted set 即zset数据类型
将每个元素的前面设置一个double分数(看成是权重)
Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但是分数却是可以重复的。
#向有序集合添加一个或多个成员 或者更新已存在成员的分数
zadd zset1 10 str1 20 str2 30 str2 40 str4
#ZCOUNT 计算在有序集合中指定区间分数的成员数
zcout zset1 10 40
#ZRANGE 打印数据和分数
ZRANGE zset1 0 1 withscores
#保证元素的分数值一致的情况下面 使用ZRANGEBYLEX命令
#后面是范围值 [闭区间 (开区间 大于等于 小于
#ZRANGEBYLEX myset2 - + -表示负无穷 +表示正无穷
zadd myset2 10 k1 10 hello 10 world 10 wangdao
ZRANGEBYLEX myset2 [h [k1 #大于等于h 小于等于k1的字符串
#ZCORE 打印指定元素的分数
zscore zset1 str1
5.hash数据类型(重要)
Redis hash 是一个string类型的field(字段) 和value(值)的映射表,hash特别适合用于存储对象
Key-value模式不变,但value是一个键值对
map<key, map<key1, value>>
#string类型可以看成是key-value类型,但是hash可以看成是 key1 -(key2-value)
#map<key, value> map<key1, map<key2, value>>
#set k1 100
#hset hash1 str1 100
#一次可以获取或者设置多个值
#key-people
hmset people age 10 sex man
#获取people的age sex
hmget people age sex
#hkeys people 获取key
hkeys people
#hvalues people
可以练习一下这些命令
五 Redis的配置文件
最后要给大家介绍的是Redis的配置文件,里面有许多对Redis的配置进行了描述,有兴趣的可以自行阅读一下!
路径:/etc/redis下面会有一个6379.conf