Redis概述和使用

typora-root-url: ..


02_redis概述和使用

一、目标

  • Redis 简介
  • Redis 安装
  • Redis 数据类型使用
  • Redis 之 Keys 通用操作
  • 使用可视化工具连接 Redis
  • 使用 Jedis 连接 Redis

二、内容

1、Redis 简介

1)、NoSQL介绍

  • NoSQL (Not noly SQL)不仅仅是SQL,属于非关系型数据库

  • Redis就属于非关系型数据库

    传统的Mysql ,oracle ,sql server 等 都是关系型数据库

  • 为什么需要NoSQL,主要应对以下问题,传统关系型数据库力不从心

High performance -高并发读写

Huge Storage-海量数据的高效率存储和访问

High Scalablility && High Availability 高可扩展性和高可用性

NoSQL 产品 MongoDB Redis等等  Redis目前主流
  • NoSQL的特点
易扩展

灵活的数据模型

大数据量,高性能

高可用

2)、redis介绍

  • Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

  • 高性能键值对数据库,支持的键值数据类型

字符串类型(String)

列表类型(List)

有序集合类型(Sorted-set)

散列类型(Hash)

集合类型(Set)
  • Redis的应用场景
缓存

任务队列

网站访问统计

数据过期处理

应用排行榜

分布式集群架构中的session分离

2、Redis 安装

  • Redis从一开始就只支持Linux,后面虽然有团队搞出Window版本,但是我还是建议大伙安装到Linux中
  • 准备工作 VMware 以及Xshell(这个之前的内容中同学们已经学过)
  • redis官方安装教程,但是比较简单,不适合生产环境的安装部署
https://redis.io/   大家可以按照官网教程去安装
  • 同学们按照以下方式安装

1)、安装gcc

  • gcc编译c的,因为redis是c编写的,所以我们先安装下gcc
yum install gcc-c++

2)、redis安装准备

  • 下载
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
  • 解压
tar -zxvf redis-3.2.9.tar.gz
  • 查看
[root@localhost ~]# ll
总用量 1548
-rw-------. 1 root root    1261 6月  27 19:54 anaconda-ks.cfg
-rw-r--r--. 1 root root   25680 4月  27 18:45 mysql57-community-release-el7-11.noarch.rpm
drwxrwxr-x. 6 root root    4096 5月  17 23:39 redis-3.2.9
-rw-r--r--. 1 root root 1547695 5月  17 23:40 redis-3.2.9.tar.gz
[root@localhost ~]# 
这样/root/目录下就有redis了
  • 编译
进入目录  cd redis-3.2.9
编译  make

3)、安装redis

安装到/usr/local/redis/
make PREFIX=/usr/local/redis install
查看安装情况
cd /usr/local/
ll
  • 已经有redis
[root@localhost local]# cd redis/
[root@localhost redis]# ll
总用量 0
drwxr-xr-x. 2 root root 134 7月   2 16:44 bin
[root@localhost redis]# 
  • redis里有个bin
[root@localhost redis]# cd bin/
[root@localhost bin]# ll
总用量 15060
-rwxr-xr-x. 1 root root 2431832 7月   2 16:44 redis-benchmark
-rwxr-xr-x. 1 root root   25168 7月   2 16:44 redis-check-aof
-rwxr-xr-x. 1 root root 5181840 7月   2 16:44 redis-check-rdb
-rwxr-xr-x. 1 root root 2584848 7月   2 16:44 redis-cli
lrwxrwxrwx. 1 root root      12 7月   2 16:44 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 5181840 7月   2 16:44 redis-server
[root@localhost bin]# 
bin里是一些工具
  • cd回到root,我们需要把一个配置文件 复制到 redis下 后台启动用到
[root@localhost redis-3.2.9]# cp redis.conf /usr/local/redis/
[root@localhost redis-3.2.9]# ll /usr/local/redis/
总用量 48
drwxr-xr-x. 2 root root   134 7月   2 16:44 bin
-rw-r--r--. 1 root root 46695 7月   2 16:49 redis.conf
[root@localhost redis-3.2.9]# 

4)、启动和关闭redis服务

  • 启动redis就是执行redis里的bin里的redis-server命令

    进入redis目录 执行

[root@localhost redis-3.2.9]# cd /usr/local/redis/
[root@localhost redis]# bin/redis-server
  • 出现这种图标,说明启动成功。

  • 但是 ,这种启动是前端或者前台启动,假如退出 程序就终止或者退出了。

    所以这种服务程序,必须后端运行。

  • 我们通过修改配置文件redis.conf,操作,我们ctrl+c 退出当前程序。

vi打开redis.conf  vi /usr/local/redis/redis.conf 找到
  • 把no改成yes,esc退出 wq!保存
  • 然后进入redis目录,然后加载配置文件运行
[root@localhost ~]# cd /usr/local/redis/
[root@localhost redis]# ./bin/redis-server ./redis.conf 
  • 我们通过ps -ef | grep -i redis命令来搜索redis服务
[root@localhost redis]# ps -ef | grep -i redis
root       8692      1  0 16:52 ?        00:00:19 bin/redis-server *:6379
root       8954   8930  0 20:30 pts/0    00:00:00 grep --color=auto -i redi
[root@localhost redis]# 
  • 我们通过shutdown命令来停止redis服务的运行
[root@localhost redis]# ./bin/redis-cli shutdown
[root@localhost redis]# ps -ef | grep -i redis
root       8959   8930  0 20:35 pts/0    00:00:00 grep --color=auto -i redi
[root@localhost redis]# 

5)、redis基本使用

  • 进入客户端
启动redis服务器端
[root@localhost redis]# ./bin/redis-server ./redis.conf
进入到redis客户端
[root@localhost redis]# ./bin/redis-cli
127.0.0.1:6379> 
  • 我们存储 name:djin,key:value格式
通过set设置,通过get获取
127.0.0.1:6379> set name djin
OK
127.0.0.1:6379> get name
"djin"
通过set设置,通过get获取
  • 通过del删除key,keys,显示所有keys
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> 

3、Redis 数据类型使用

  • 前面我们介绍了redis有五种数据类型,接下来我们一一都学习一下
  • Key定义的注意点:不要过长,不要过短,统一的命名规范

1)、String类型

  • 二进制安全的,存入和获取的数据相同;Value最多可以容纳的数据长度是512M
  • String类型常用命令:赋值、取值、删除、数值增减、扩展命令
  • 赋值
127.0.0.1:6379> set title '标题'
OK
  • 取值
127.0.0.1:6379> get title
"标题"
  • 获取并设置值
127.0.0.1:6379> getset title open1111
"标题"
127.0.0.1:6379> get title
"open1111"
  • 删除
127.0.0.1:6379> del title
(integer) 1
127.0.0.1:6379> get title
(nil)  表示没有此数据
  • incr key 自增1
假如没有定义 则默认0
假如非数值类型 则报错
127.0.0.1:6379> incr n
(integer) 1
127.0.0.1:6379> get n
"1"

127.0.0.1:6379> set nn 2
OK
127.0.0.1:6379> incr nn
(integer) 3
127.0.0.1:6379> get nn
"3"
127.0.0.1:6379> 

127.0.0.1:6379> set n2 djin
OK
127.0.0.1:6379> incr n2
(error) ERR value is not an integer or out of range
127.0.0.1:6379>
  • decr key 自减1
127.0.0.1:6379> decr nn
(integer) 2
127.0.0.1:6379> get nn
"2"
127.0.0.1:6379>
  • incrby key 指定增量值
127.0.0.1:6379> incrby nn 8
(integer) 10
127.0.0.1:6379> get nn
"10"
127.0.0.1:6379>
  • decrby key 指定减量值
127.0.0.1:6379> decrby nn 4
(integer) 6
127.0.0.1:6379> get nn
"6"
127.0.0.1:6379>
  • append 追加字符串
假如没定义 直接赋值
127.0.0.1:6379> append s1 jj
(integer) 2
127.0.0.1:6379> get s1
"jj"
127.0.0.1:6379> append s1 bb
(integer) 4
127.0.0.1:6379> get s1
"jjbb"

2)、List类型

  • ArrayList使用数组方式,LinkedList使用双向链接方式
  • 双向链接表中增加数据,双向链接表中删除数据
  • List类型常用命令:两端添加、两端弹出、扩展命令
  • lpush 方式添加一个或者多个元素
从左边开始添加
127.0.0.1:6379> lpush l1 a b c d
(integer) 4
127.0.0.1:6379> lpush l1 1 2 3 4
(integer) 8
  • lrange 获取指定方位的集合元素
从第1个开始 到倒数第一个 也就是最后一个 也就是 所有数据
127.0.0.1:6379> lrange l1 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "d"
6) "c"
7) "b"
8) "a"
  • 获取从第1个到第6个集合元素
127.0.0.1:6379> lrange l1 0 6
1) "4"
2) "3"
3) "2"
4) "1"
5) "d"
6) "c"
7) "b"
  • rpush 从右端开始添加一个或者多个元素(一般人比较习惯这种方式)
127.0.0.1:6379> rpush l2 a b c d
(integer) 4
127.0.0.1:6379> rpush l2 1 2 3 4
(integer) 8
127.0.0.1:6379> lrange l2 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "1"
6) "2"
7) "3"
8) "4"
127.0.0.1:6379> lrange l2 0 6
1) "a"
2) "b"
3) "c"
4) "d"
5) "1"
6) "2"
7) "3"
  • lpop 左侧弹出集合元素
127.0.0.1:6379> lrange l2 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "1"
6) "2"
7) "3"
8) "4"
127.0.0.1:6379> lpop l2
"a"
127.0.0.1:6379> lrange l2 0 -1
1) "b"
2) "c"
3) "d"
4) "1"
5) "2"
6) "3"
7) "4"
  • rpop 右侧弹出集合元素
127.0.0.1:6379> lrange l2 0 -1
1) "b"
2) "c"
3) "d"
4) "1"
5) "2"
6) "3"
7) "4"
127.0.0.1:6379> rpop l2
"4"
127.0.0.1:6379> lrange l2 0 -1
1) "b"
2) "c"
3) "d"
4) "1"
5) "2"
6) "3"
  • llen查看元素个数
127.0.0.1:6379> llen l2
(integer) 6
  • lpushx 集合头部插入元素
127.0.0.1:6379> lpushx l2 xx
(integer) 7
127.0.0.1:6379> lrange l2 0 -1
1) "xx"
2) "b"
3) "c"
4) "d"
5) "1"
6) "2"
7) "3"
  • rpushx 集合尾部插入元素
127.0.0.1:6379> rpushx l2 yy
(integer) 8
127.0.0.1:6379> lrange l2 0 -1
1) "xx"
2) "b"
3) "c"
4) "d"
5) "1"
6) "2"
7) "3"
8) "yy"
  • lrem 从指定方向删除指定个数的指定元素
先加点数据搞个新集合l3
127.0.0.1:6379> lpush l3 1 3 2 3 2 1 2 1 3
(integer) 9
127.0.0.1:6379> lrange l3 0 -1
1) "3"
2) "1"
3) "2"
4) "1"
5) "2"
6) "3"
7) "2"
8) "3"
9) "1"

从左边开始删除2个1
127.0.0.1:6379> lrem l3 2 1
(integer) 2
127.0.0.1:6379> lrange l3 0 -1
1) "3"
2) "2"
3) "2"
4) "3"
5) "2"
6) "3"
7) "1"

从右边开始删除2个3
127.0.0.1:6379> lrem l3 -2 3
(integer) 2
127.0.0.1:6379> lrange l3 0 -1
1) "3"
2) "2"
3) "2"
4) "2"
5) "1"

删除所有2
127.0.0.1:6379> lrem l3 0 2
(integer) 3
127.0.0.1:6379> lrange l3 0 -1
1) "3"
2) "1"
  • lset 设置集合指定索引的值
127.0.0.1:6379> lrange l1 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "d"
6) "c"
7) "b"
8) "a"

索引从0开始
127.0.0.1:6379> lset l1 3 xxxx
OK
127.0.0.1:6379> lrange l1 0 -1
1) "4"
2) "3"
3) "2"
4) "xxxx"
5) "d"
6) "c"
7) "b"
8) "a"
  • linsert 在集合里插入指定元素
在xxxx元素之前插入aa
127.0.0.1:6379> linsert l1 before xxxx aa
(integer) 9
127.0.0.1:6379> lrange l1 0 -1
1) "4"
2) "3"
3) "2"
4) "aa"
5) "xxxx"
6) "d"
7) "c"
8) "b"
9) "a"

在xxxx元素之后插入bb
127.0.0.1:6379> linsert l1 after xxxx bb
(integer) 10
127.0.0.1:6379> lrange l1 0 -1
 1) "4"
 2) "3"
 3) "2"
 4) "aa"
 5) "xxxx"
 6) "bb"
 7) "d"
 8) "c"
 9) "b"
10) "a"
  • rpoplpush 把A集合尾部元素弹出并插入到B集合头部
127.0.0.1:6379> rpush l4 a b c
(integer) 3
127.0.0.1:6379> rpush l5 1 2 3
(integer) 3
127.0.0.1:6379> lrange l4 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> lrange l5 0 -1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> rpoplpush l4 l5
"c"
127.0.0.1:6379> lrange l4 0 -1
1) "a"
2) "b"
127.0.0.1:6379> lrange l5 0 -1
1) "c"
2) "1"
3) "2"
4) "3"

3)、Hash类型

  • String key和String Value的Map容器,每一个Hash可以存储4294967295个键值对
  • Hash类型常用命令:赋值、取值、删除、增加数字、判断字段是否存在、获取hash属性个数、获取hash所有属性名称
  • hset单个字段设置和hget单个字段取值
127.0.0.1:6379> hset h1 username djin
(integer) 1
127.0.0.1:6379> hset h1 password 123456
(integer) 1
127.0.0.1:6379> hget h1 username
"djin"
127.0.0.1:6379> hget h1 password
"123456"
  • hmset 多个字段一起设置和hmget多个值取出
127.0.0.1:6379> hmset h2 username open1111 password 123456
OK
127.0.0.1:6379> hmget h2 username
1) "open1111"
127.0.0.1:6379> hmget h2 password
1) "123456"
127.0.0.1:6379> hmget h2 username password
1) "open1111"
2) "123456"
  • hgetall取出所有设置的字段值
127.0.0.1:6379> hgetall h2
1) "username"
2) "open1111"
3) "password"
4) "123456"
  • hdel删除属性,可以一次删除一个或者多个
127.0.0.1:6379> hdel h2 username password
(integer) 2
127.0.0.1:6379> hgetall h2
(empty list or set)
  • hincrby增加数字
127.0.0.1:6379> hset h1 age 20
(integer) 1
127.0.0.1:6379> hincrby h1 age 5
(integer) 25
  • hexists判断字段是否存在 1表示存在 0表示不存在
127.0.0.1:6379> hexists h1 age
(integer) 1
127.0.0.1:6379> hexists h1 age2
(integer) 0
  • hlen获取hash属性个数
127.0.0.1:6379> hlen h1
(integer) 3
127.0.0.1:6379> hlen h2
(integer) 0
  • hkeys获取所有属性名称
127.0.0.1:6379> hkeys h1
1) "username"
2) "password"
3) "age"
127.0.0.1:6379> hkeys h2
(empty list or set)
  • hvals获取所有属性值
127.0.0.1:6379> hvals h1
1) "java1234"
2) "123456"
3) "25"
127.0.0.1:6379> hvals h2
(empty list or set)
127.0.0.1:6379> 

4)、Set类型

  • 和List类型不同的是,Set集合中不允许出现重复的元素,Set可包含的最大元素数量是4294967295
  • Set类型常用命令:添加/删除元素、获取集合中的元素、集合中的差集运算、集合中的交集运算、集合中的并集元算、扩展命令
  • sadd key member [member ...],添加set元素
添加三个元素
127.0.0.1:6379> sadd set1  a b c
(integer) 3
  • smembers key,查看指定key集合元素
127.0.0.1:6379> smembers set1
1) "c"
2) "b"
3) "a"
  • 继续添加元素 发现 重复元素不再添加
127.0.0.1:6379> sadd set1 a d e
(integer) 2
127.0.0.1:6379> smembers set1
1) "c"
2) "d"
3) "b"
4) "a"
5) "e"
  • srem key member [member ...],删除元素
删除两个元素
127.0.0.1:6379> srem set1 a d
(integer) 2
127.0.0.1:6379> smembers set1
1) "b"
2) "c"
3) "e"
  • sismember key member,判断某个元素是否存在 返回1 表示存在 返回0表示不存在
127.0.0.1:6379> sismember set1 a
(integer) 0
127.0.0.1:6379> sismember set1 b
(integer) 1
  • sdiff,计算差集
集合的顺序不同 结果不一样 根据前者参考
127.0.0.1:6379> sadd set2 a b c
(integer) 3
127.0.0.1:6379> sadd set3 b c d e
(integer) 4
127.0.0.1:6379> sdiff set2 set3
1) "a"
127.0.0.1:6379> sdiff set3 set2
1) "d"
2) "e"
  • sinter,计算交集
127.0.0.1:6379> sinter set2 set3
1) "c"
2) "b"
  • sunion,计算并集
127.0.0.1:6379> sunion set2 set3
1) "e"
2) "a"
3) "b"
4) "c"
5) "d"
  • scard,计算元素总数
127.0.0.1:6379> smembers set1
1) "b"
2) "c"
3) "e"
127.0.0.1:6379> scard set1
(integer) 3
  • srandmember,随机取一个元素
127.0.0.1:6379> srandmember set1
"c"
127.0.0.1:6379> srandmember set1
"e"
  • sdiffstore,把差集结果存储到新集合中
127.0.0.1:6379> smembers set2
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> smembers set3
1) "c"
2) "e"
3) "d"
4) "b"
127.0.0.1:6379> sdiffstore r1 set2 set3
(integer) 1
127.0.0.1:6379> smembers r1
1) "a"
  • sinterstore,把交集结果存储到新集合中
127.0.0.1:6379> sinterstore r2 set2 set3
(integer) 2
127.0.0.1:6379> smembers r2
1) "c"
2) "b"
  • sunionstore,把并集结果存储到新集合中
127.0.0.1:6379> sunionstore r3 set2 set3
(integer) 5
127.0.0.1:6379> smembers r3
1) "e"
2) "a"
3) "b"
4) "c"
5) "d"
  • Set类型使用场景:跟踪一些唯一性数据,用于维护数据对象之间的关联关系

5)、Sorted-set类型

  • Sorted-Set和Set的区别:Sorted-Set中的成员在集合中的位置是有序的
  • 存储Sorted-set常用命令:添加元素、获得元素、删除元素、范围查询、扩展命令
  • zadd 添加元素 里面包括评分和值
我们添加集合sort1 元素是a,b,c 评分分别是5,4,6
集合里的排序是根据评分从小到大排序的
127.0.0.1:6379> zadd sort1 5 a 4 b 6 c
(integer) 3
  • zrange是查找元素 -1代表是最后一个
127.0.0.1:6379> zrange sort1 0 -1
1) "b"
2) "a"
3) "c"
  • 我们继续添加元素
1.假如此元素集合里面已经有了,则覆盖
我们继续添加b 此时评分改成7 
127.0.0.1:6379> zadd sort1 7 b
(integer) 0
通过zscore 获取b的评分
127.0.0.1:6379> zscore sort1 b
"7"
发现已经修改了

2.添加的元素不在集合里,则添加进去
127.0.0.1:6379> zadd sort1 9 d
(integer) 1
127.0.0.1:6379> zrange sort1 0 -1
1) "a"
2) "c"
3) "b"
4) "d"
  • 删除元素zrem
127.0.0.1:6379> zrem sort1 b
(integer) 1
127.0.0.1:6379> zrange sort1 0 -1
1) "a"
2) "c"
3) "d"
  • zcard 查看集合里的元素个数
127.0.0.1:6379> zcard sort1
(integer) 3
  • withscores 把评分也显示出来
127.0.0.1:6379> zrange sort1 0 -1 withscores 
1) "a"
2) "5"
3) "c"
4) "6"
5) "d"
6) "9"
  • zrevrange 降序排列
127.0.0.1:6379> zrevrange sort1 0 -1 withscores
1) "d"
2) "9"
3) "c"
4) "6"
5) "a"
6) "5"
  • 我们再加两个元素
127.0.0.1:6379> zadd sort1 10 e  5 f
(integer) 2
  • zremrangebyrank 根据排名来删除元素 删除3个
127.0.0.1:6379> zremrangebyrank sort1 0 2
(integer) 3
127.0.0.1:6379> zrange sort1 0 -1 withscores
1) "d"
2) "9"
3) "e"
4) "10"
  • 再添加元素
127.0.0.1:6379> zadd sort1 11 f 16 g 18 h
(integer) 3
127.0.0.1:6379> zrange sort1 0 -1 withscores
 1) "d"
 2) "9"
 3) "e"
 4) "10"
 5) "f"
 6) "11"
 7) "g"
 8) "16"
 9) "h"
10) "18"
  • zremrangebyscore 根据具体评分范围来删除元素
127.0.0.1:6379> zremrangebyscore sort1 10 16
(integer) 3
127.0.0.1:6379> zrange sort1 0 -1 withscores
1) "d"
2) "9"
3) "h"
4) "18"
  • 再添加元素
127.0.0.1:6379> zadd sort1 20 i 23 j 30 k
(integer) 3
127.0.0.1:6379> zrange sort1 0 -1 withscores
 1) "d"
 2) "9"
 3) "h"
 4) "18"
 5) "i"
 6) "20"
 7) "j"
 8) "23"
 9) "k"
10) "30"
  • zrangebyscore 根据评分范围来查找元素
127.0.0.1:6379> zrangebyscore sort1 18 23 withscores 
1) "h"
2) "18"
3) "i"
4) "20"
5) "j"
6) "23"
  • limit 限定查找起始 类似分页
127.0.0.1:6379> zrangebyscore sort1 18 23 withscores limit 0 2
1) "h"
2) "18"
3) "i"
4) "20"
  • zincrby 给指定元素加分
127.0.0.1:6379> zincrby sort1 5 h
"23"
127.0.0.1:6379> zrange sort1 0 -1 withscores
 1) "d"
 2) "9"
 3) "i"
 4) "20"
 5) "h"
 6) "23"
 7) "j"
 8) "23"
 9) "k"
10) "30"
  • zcount 查找指定评分范围的元素个数
127.0.0.1:6379> zcount sort1 20 23
(integer) 3
  • Sorted-Set使用场景:大型在线游戏积分排行榜,构建索引数据

4、Redis 之 Keys 通用操作

  • keys * 显示所有key
127.0.0.1:6379> keys *
 1) "sort1"
 2) "l2"
 3) "set2"
 4) "r1"
 5) "h1"
 6) "n2"
 7) "l3"
 8) "r2"
 9) "s1"
10) "set3"
11) "set1"
12) "r3"
13) "n"
14) "n3"
15) "nn"
16) "l1"
  • 查找所有以s开头的key,用s 代表任意字符
127.0.0.1:6379> keys s*
1) "sort1"
2) "set2"
3) "s1"
4) "set3"
5) "set1"
  • 查找所有s开头 后面紧跟任意一个字符的key
127.0.0.1:6379> keys s?
1) "s1"
  • del删除key
127.0.0.1:6379> del n2 n3 nn
(integer) 3
  • exists判断key是否存在 1表示存在 0表示不存在
127.0.0.1:6379> exists n2
(integer) 0
127.0.0.1:6379> exists l1
(integer) 1
  • get获取元素
127.0.0.1:6379> get n
"1"
  • rename对key重命名
127.0.0.1:6379> rename n n2
OK
127.0.0.1:6379> get n
(nil)
127.0.0.1:6379> get n2
"1"
  • expire 设置n2 有效时间
127.0.0.1:6379> expire n2 120
(integer) 1
  • ttl查看剩余时间
127.0.0.1:6379> ttl n2
(integer) 116
  • type显示类型
127.0.0.1:6379> type n2
string
127.0.0.1:6379> type l1
list
127.0.0.1:6379> type s1
string
127.0.0.1:6379> type sort1
zset

5、使用可视化工具连接 Redis

1)、配置redis

  • 我们配置下防火墙 开一个6379端口权限
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
  • 我们配置下 redis配置文件
[root@localhost redis]# vi /usr/local/redis/redis.conf

这里绑定了本机,我们把这个备注掉;
# bind 127.0.0.1
  • 配置完后重新启动redis
[root@localhost ~]# cd /usr/local/redis/
[root@localhost redis]# ./bin/redis-cli shutdown
[root@localhost redis]# ./bin/redis-server ./redis.conf
  • 远程连接redis时redis自我保护拒绝访问,配置允许远程访问
  • 最好的办法设置密码
进入客户端,设置密码 123456
[root@localhost redis]# ./bin/redis-cli
127.0.0.1:6379> config set requirepass 123456

退出客户端
127.0.0.1:6379> quit
进入到客户端
[root@localhost redis]# ./bin/redis-cli
输入密码登录
127.0.0.1:6379> auth 123456
OK

2)、安装可视化工具

  • 我们用的redis的可视化工具为:

  • 双击安装软件进行安装;安装步骤很简单,下一步---->完成即可,步骤省略掉

  • 打开安装好的可视化工具界面为:

  • 链接到redis,如图所示:

6、使用 Jedis 连接 Redis

1)、Jedis简介

  • 实际开发中,我们需要用Redis的连接工具连接Redis然后操作Redis,

    对于主流语言,Redis都提供了对应的客户端

Redis客户端官网地址:https://redis.io/clients
Redis的java客户端官网地址:https://redis.io/clients#java

2)、Jedis案例

  • 建一个Maven项目:jedis_demo 01,步骤省略掉
  • 加入Jedis的客户端maven坐标依赖
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>
  • 创建普通JedisTest链接测试类
/**
 *   Jedis测试类
 */
public class JedisTest {

    @Test
    public void test01(){
        Jedis jedis=new Jedis("192.168.1.104",6379); // 创建客户端 设置IP和端口
        jedis.auth("123456"); // 设置密码
        jedis.set("stuName", "张三"); // 设置值
        String value=jedis.get("stuName"); // 获取值
        System.out.println(value);
        jedis.close(); // 释放连接资源
    }
}
  • 测试结果如下:

  • 创建JedisPoolTest连接池测试类

/**
 *   Jedis连接池测试类
 */
public class JedisPoolTest {

    @Test
    public void test01(){
        //进行Jedis连接池相关配置
        JedisPoolConfig config=new JedisPoolConfig(); // 连接池的配置对象
        config.setMaxTotal(100); // 设置最大连接数
        config.setMaxIdle(10); // 设置最大空闲连接数
        //创建Jedis连接池对象
        JedisPool jedisPool=new JedisPool(config,"192.168.1.104",6379);
        //定义Jedis链接对象
        Jedis jedis=null;
        try{
            jedis=jedisPool.getResource(); // 获取连接
            jedis.auth("123456"); // 设置密码
            jedis.set("teaName", "李四"); // 设置值
            String value=jedis.get("teaName"); // 获取值
            System.out.println(value);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            //关闭Jedis链接对象
            if(jedis!=null){
                jedis.close();
            }
            //关闭Jedis链接池对象
            if(jedisPool!=null){
                jedisPool.close();
            }
        }
    }
}
  • 测试结果如下:

三、总结

  • Redis 简介和 安装
  • Redis 数据类型介绍
  • Redis 之 Keys 通用操作
  • 使用可视化工具连接 Redis
  • 使用 Jedis 连接 Redis
I Really Want to Stay at Your House
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇