Redis入门教程Redis安装部署及五种基本数据类型

Redis是什么?怎么安装一个单机版本的Redis?Redis的五种基本数据类型?

一、Redis是什么?

1、Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

2、Redis 与其他 key - value 缓存产品有以下三个特点:

(1)Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

(2)Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。

(3)Redis 支持数据的备份,即 master-slave 模式的数据备份。

3、Redis 优势

(1)性能极高 – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。

(2)丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。

(3)丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。

二、Redis5的linux安装部署说明

<一> 安装Redis-5.0.14

1、进入官网下载

Redis入门教程Redis安装部署及五种基本数据类型_第1张图片

2、将安装包上传到服务器上的路径下,进行解压 tar -zxvf redis-5.0.14.tar.gz,会解压出一个文件夹 redis-5.0.14

drwxrwxr-x 6 root root    4096 Jan  8 10:19 redis-5.0.14
-rw-r--r-- 1 root root 2000179 Jan  8 09:49 redis-5.0.14.tar.gz

3、进入到 redis-5.0.14 目录下执行make编译,等待编译结束

[root@hhhh redis-5.0.14]# make

4、进入到 redis-5.0.14 目录下执行make install 安装

[root@hhhh redis-5.0.14]# make install 

正常情况如果没有出现异常,单机版本的Redis就安装结束了

5、下面列出我在安装中遇到的2种异常,比较常见、记录一下其对应解决方法

(1)make install 出错/bin/sh: cc: command not found ,

[root@hhhh redis-5.0.14]# make install
cd src && make install
make[1]: Entering directory `/cloud/redis/redis-5.0.14/src'
    CC Makefile.dep
make[1]: Leaving directory `/cloud/redis/redis-5.0.14/src'
make[1]: Entering directory `/cloud/redis/redis-5.0.14/src'
    CC adlist.o
/bin/sh: cc: command not found

解决方式:执行 yum install gcc gcc-c++

(2)第二个错误

[root@hhhh redis-5.0.14]# make install
cd src && make install
make[1]: Entering directory `/cloud/redis/redis-5.0.14/src'
    CC adlist.o
In file included from adlist.c:34:0:
zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory
 #include <jemalloc/jemalloc.h>
                               ^
compilation terminated.
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/cloud/redis/redis-5.0.14/src'
make: *** [install] Error 2

错误原因是jemalloc重载了Linux下的ANSI C的malloc和free函数

解决方式:make MALLOC=libc

<二> 启动Redis服务

1、修改redis.conf文件(redis.conf文件非常重要,这里先简单介绍一下当下用得着的几个配置,后续详细说明)

修改配置文件之前要养成备份的好习惯

默认是只能本机连接操作redis.配置允许所有ip都可以访问redis,在bind 127.0.0.1前加“#”将其注释掉
默认为保护模式,把 protected-mode yes 改为 protected-mode no
redis启动默认为不守护进程模式,窗口关闭,就会停止进程。把daemonize no 修改为daemonize yes,这样redis就可以后台执行

具体配置如下:
#bind 127.0.0.1
daemonize yes
requirepass pass

2、启动程序,指定配置文件启动Redis程序

[root@hhhh src]# ./redis-server ../redis.conf

3、不出意外,到这里程序已经正常启动了,查看进程

[root@hhhh src]# ps -ef |grep redis
root      2437     1  0 10:19 ?        00:00:00 ./redis-server *:6379
root      2442  1324  0 10:19 pts/0    00:00:00 grep --color=auto redis

4、客户端连接Redis

[root@hhhh src]# pwd
/cloud/redis/redis-5.0.14/src
[root@hhhh src]# ./redis-cli 

127.0.0.1:6379> 

至此单机版Redis安装部署启动成功,赶紧去冲学习常用的api命令吧

Redis入门教程Redis安装部署及五种基本数据类型_第2张图片

三、Redis的五种数据类型(先介绍简单使用,其数据结构和应用场景将在后续文章中给出)

API使用教程参考:菜鸟教程Redis的使用 对新手非常nice

String 字符串、Hash 散列、List 列表、Set 集合、ZSet 有序集合

<一> 、String 字符串

(1)常用API

序号 命令 说明
1 set key value 设置指定 key 的值
2 get key 获取指定 key 的值
3 mset key value [key value …] 同时设置一个或多个 key-value 对。
4 mget key1 [key2…] 获取所有(一个或多个)给定 key 的值。
5 setnx key value 只有在 key 不存在时设置 key 的值。常用于实现分布式锁
6 setex key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
设置过期时间,是为了更好的利用redis的内存
7 incr key 将 key 中储存的数字值+1。
8 incrby key increment 将 key 所储存的值加上给定的增量值

还要一些命令 GETBIT 、SETBIT 等直接操作位的(先不进行介绍)

<二>、 Hash 散列

hash< key field1 value1 [field2 value2 ]>

//如下java种的hashmap:相当于 myHashMap 是key; caocao、xunxu、xuchu是field; 主公、谋士、保镖是对应的value
Map<String,String> myHashMap =  new HashMap<>();
myHashMap.put("caocao","主公");
myHashMap.put("xunxu","谋士");
myHashMap.put("xuchu","保镖");

(1)常用api

序号 命令 说明
1 hsetkey field value 将哈希表 key 中的字段 field 的值设为 value
2 hget key field 获取存储在哈希表中指定字段的值
3 hmset key field1 [field2] 获取所有给定字段的值
4 hmget key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中
5 hgetall key 获取在哈希表中指定 key 的所有字段和值
6 hkeys key 获取所有哈希表中的字段
7 hvals key 获取哈希表中所有值
8 hlen key 获取哈希表中字段的数量
9 hdel key field1 [field2] 删除一个或多个哈希表字段
10 hexists key field 查看哈希表 key 中,指定的字段是否存在。
11 hscan key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对(当hash中的字段比较多的时候,如果需要全部进行遍历
则需要用这个命令,否则的话由于redis是单线程,会造成Redis的阻塞)

hscan 的长度count失效场景分析

<三> 、SET 集合

类似于java中的set几何

序号 命令 说明
1 sadd key member1 [member2] 向集合添加一个或多个成员
2 srem key member1 [member2] 移除集合中一个或多个成员
3 smembers key 获取集合的成员数
4 scard key 同时将多个 field-value (域-值)对设置到哈希表 key 中
5 sismember key member 判断 member 元素是否是集合 key 的成员
5 sinterstore destination key1 [key2] 返回给定所有集合的交集并存储在 destination 中
7 sunionstore destination key1 [key2] 所有给定集合的并集存储在 destination 集合中
8 sdiffstore destination key1 [key2] 返回给定所有集合的差集并存储在 destination 中
9 srandmember key [count] 返回集合中一个或多个随机数(可以实现发牌功能)

<四>、List列表

等同于java种的List

序号 命令 说明
1 lpush key value1 [value2] 将一个或多个值插入到列表头部
2 rpush key value1 [value2] 在列表中添加一个或多个值
3 linsert key BEFORE|AFTER pivot value 在列表的元素前或者后插入元素
4 lset key index value 通过索引设置列表元素的值
5 lpop key 移出并获取列表的第一个元素
6 rpop key 移除列表的最后一个元素,返回值为移除的元素。
7 lrem key count value 移除列表元素
8 ltrim key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素
都将被删除。
9 lindex key index 通过索引获取列表中的元素
10 lrange key start stop 获取列表指定范围内的元素
11 llen key 获取列表长度

<五 >、ZSET集合(有序集合)

(1)zset的常用API

序号 命令 说明
1 zadd key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
2 zincrby key increment member 有序集合中对指定成员的分数加上增量 increment
3 zrem key member [member …] 移除有序集合中的一个或多个成员
4 zrange key start stop [WITHSCORES] 通过索引区间返回有序集合指定区间内的成员
5 zrevrange key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到低
6 zrangebyscore key max min [WITHSCORES] 通过分数返回有序集合指定区间内的成员
7 zrevrangebyscore key max min [WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序
8 zrank key member 返回有序集合中指定成员的索引
9 zrevrank key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
10 zcount key min max 计算在有序集合中指定区间分数的成员数
11 zcard key 获取有序集合的成员数

(2) 由于zset 很重要,java中又没有对应的数据结构类型,特举一个实际案例如下

根据当前百度热搜,采用zset缓存实现的一个具体案例

Redis入门教程Redis安装部署及五种基本数据类型_第3张图片

## 模拟在Redis中添加一个,一个热点新闻的key hotnews
## 1、演示zadd 指令,向缓存中添加热点新闻
127.0.0.1:6379> zadd hotnews 4980000 "数读十九届六中全会精神" 4860000 "国家卫健委回应西安孕妇流产等事件"  4770000 "各地贯彻十九届六中全会精神纪实"  4620000  "中央巡视组刚走 “金融虎”就落马" 4590000 "哈萨克斯坦前总理涉嫌叛国罪被捕"  4440000  "广西近百鸵鸟“越狱”街头狂奔"
(integer) 6

## 2、演示zincrby 指令,
## 某一个时刻有十个用户点击了 "各地贯彻十九届六中全会精神纪实" 这条新闻,则将其热度+10
127.0.0.1:6379> zincrby hotnews 10 "各地贯彻十九届六中全会精神纪实"
"4770010"

## 3、演示zrevrange 指令
## 演示获取当前最热点的三条新闻,根据分数值从高到低排序
127.0.0.1:6379> zrevrange hotnews 0 2 withscores
数读十九届六中全会精神
4980000
国家卫健委回应西安孕妇流产等事件
4860000
各地贯彻十九届六中全会精神纪实
4770010

## 4、演示zrange 指令
## 演示获取当前最  不  热点的三条新闻,根据分数值从低到高排序
127.0.0.1:6379> zrange hotnews 0 2 withscores 
广西近百鸵鸟“越狱”街头狂奔
4440000
哈萨克斯坦前总理涉嫌叛国罪被捕
4590000
中央巡视组刚走 “金融虎”就落马
4620000

## 5、演示zrangebyscore 指令
## 演示获取从低到高获取热度从4500000 - 4800000之间的新闻数据
127.0.0.1:6379> zrangebyscore hotnews 4500000 4800000 withscores
哈萨克斯坦前总理涉嫌叛国罪被捕
4590000
中央巡视组刚走 “金融虎”就落马
4620000
各地贯彻十九届六中全会精神纪实
4770010

## 6、演示zrevrangebyscore 指令
## 演示获取从低到高获取热度从5000000 - 4800000之间的新闻数据
127.0.0.1:6379> zrevrangebyscore hotnews  5000000 4800000 withscores
数读十九届六中全会精神
4980000
国家卫健委回应西安孕妇流产等事件
4860000

## 7、演示zrank/zrevrank指令
## 按照降序获得 “各地贯彻十九届六中全会精神纪实” 新闻的热度排名
127.0.0.1:6379> zrevrank hotnews "数读十九届六中全会精神"
0
## 按照升序获得 “各地贯彻十九届六中全会精神纪实” 新闻的热度排名
127.0.0.1:6379> zrank hotnews "数读十九届六中全会精神"
5

如果出现中文乱码问题,客户端登陆redis的时候可以采用命令:./redis-cli --raw

注:Redis的API非常丰富,一定要多实际操作一下。来,宝,动手装一个Redis操作一下呗!
Redis入门教程Redis安装部署及五种基本数据类型_第4张图片

你可能感兴趣的:(Redis从入门到入坟,redis,缓存,java)