Redis入门(一)

一、Redis介绍

1.1 Redis是什么?

Redis是一个高性能的key-value存储系统。Redis的出现,很大程度补偿了memcached这类key/value存储的不足,它可以支持更多的数据类型,比如字符串、链表、集合、有序集合和哈希等。除此以外,它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等不同语言版本的客户端,方便用户使用。

读写分离

1.2 Redis的应用场景

在这里插入图片描述
在实际项目中,对于高并发项目而言,由于对数据库存取数据的压力较大。这时候如果只使用单台数据库做数据存取,这样数据库的性能会变得非常差。所以,一般我们会对数据库采取读写分离,主从复制master-slave的策略,以提高数据库的读写性能和安全性。但是在这种策略下,对于那种并发量特别大的网站而言,除非部署了许多数据库服务器,否则对数据库仍然有非常大的压力。后来人们使用缓存服务器,把一些不需要经常改变的数据保存在缓存服务器中。每次用户请求数据的时候,首先查询缓存服务中是否存在指定数据。如果存在,则直接从缓存服务器中读取数据,不需要再访问数据库。如果不存在,才访问数据库读取想要的数据出来,并且把数据更新到缓存服务器中。这样下次用户再次请求该数据的时候,就可以直接从缓存服务器中读取出来。
在这里插入图片描述

1.3 Redis下载和安装

1.3.1 Windows下安装Redis

Redis官方网站的下载地址:https://redis.io/download。下载完成后直接解压缩即可。目录结构如下图所示:
在这里插入图片描述

(1)启动服务
双击redis-server.exe即可启动服务。启动完成后,不要关闭命令窗口。
在这里插入图片描述
(2)启动客户端
在命令窗口输入以下命令:

#连接本地的Redis
redis-cli

#连接远程的Redis
redis-cli [-h 地址] [-p 端口] 

连接成功后的界面如下图所示:
在这里插入图片描述

1.3.2 Linux下安装Redis

第一步:下载redis。(http://download.redis.io/releases/)
下载完成后直接解压缩。

第二步:进入redis主目录,执行Make命令。

$ cd redis-5.0.5
$ make

第三步:修改redis.conf。

$ vim redis.conf

修改下面参数的值:

# 设置后台启动redis,修改如下,默认为no
daemonize yes

# 设置不仅限制本地访问
注释掉 bind 127.0.0.1

# 禁用保护模式
把 protected-mode yes 改为 protected-mode no 

修改完成后,进入src目录,执行 redis-server命令启动服务。

$ cd src
$ ./redis-server ../redis.conf

启动后的界面:
在这里插入图片描述
第四步:执行redis-cli命令连接redis服务器。

$ ./redis-cli -h 192.168.31.20

连接成功后的界面:
在这里插入图片描述

二、Redis常用命令

Redis是key-value数据结构,每一条数据都是一个键值对,而且键不能够重复。

(1)set和mset:添加键值对,如果键已经存在,就会覆盖原有的值

# 命令格式:
set key value

# mset用于同时设置多个键值对
mset key1 value1 key2 value2 ...

例如:
set a1 "micky"

(2)get:获取指定key的值

# 命令格式:
get key

例如:
get a1

#查询所有key

keys *

(3)append:向指定key的值后面追加内容;

# 命令格式:
append key value

例如:
append a1 "真棒"

(4)del:删除键值对

# 命令格式:
del key

例如:
del a1

删除当前数据库所有key:

flushdb

(5)exists:判断指定键是否存在,如果存在返回1,否则返回0;

# 命令格式:
exists key

例如:
exists a1

(6)type:查看key的类型

# 命令格式:
type key

例如:
type a1

(7)expire命令:设置key的过期时间,以秒为单位。如果超过了指定时间,该键值对就会失效

# 命令格式:
expire key seconds

例如:
expire a1 5

(8)ttl:查看有效时间,如果没有设置有效时间,就返回-1;如果key不存在,就返回-2

# 命令格式:
ttl key

例如:
ttl a1

三、Redis数据类型

3.1 string类型

string类型是Redis中最为基础的数据存储类型,该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。string类型的值最多可容纳512Mb数据。

3.2 hash类型

该类型一般用于存储对象。其命令格式:

hset key field value

也可以设置对象的多个属性值,例如:

hmset key field1 value1 field2 value2 ...

获取对象的属性:

# 获取对象的所有属性名
hkeys key

# 获取对象的属性值
hget key field

# 获取对象的多个属性值
hmget key field1 field2 ...

# 获取对象的所有属性值
hvals key

# 获取对象包含的属性个数
hlen key

删除对象属性:

# 删除对象属性
hdel key field1 field2 ...

3.3 list类型

列表类型可以按照一定顺序保存多个值。值的类型必须是string类型。其命令格式:

# 在列表左侧插入数据
lpush key value1 value2 ...

# 在列表右侧插入数据
rpush key value1 value2 ...

# 在指定field前面或后面插入value
linsert key before|after field value

获取列表数据:

# 从start开始查询指定key的成员,直到stop为止,包含stop位置的元素。
lrange key start stop

3.4 set类型

特点:无序和唯一、元素是string类型。其命令格式:

sadd key member1 member2 ...

获取所有成员:

smembers key

删除指定成员:

srem key member

3.5 zset类型

特点:有序和唯一、成员都是string类型,并且每个成员都对应着一个分值(权重),该分值的大小用于对元素进行排序。其命令格式:

zadd key score1 member1 score2 member2 ....

获取元素:

# 返回指定范围的元素,start代表左侧开始位置,0代表第一个成员;stop代表成员的结束位置,-1代表最后一个成员位置;
zrange key start stop

# 返回指定分数范围的元素
zrangebyscore key min max

返回元素的分值:

zscore key member

删除元素:

# 删除指定元素
zrem key member1 member2 ...

# 删除权重在指定范围的成员
zremrangebyscore key min max

四、Jedis

Jedis是使用Java语言连接Redis数据库的客户端技术。它为我们提供了操作Redis数据库的一套API。

使用Jedis的步骤:

  • 第一步:下载jar包(https://mvnrepository.com/artifact/redis.clients/jedis)。
  • 第二步:把jar包导入java工程;
  • 第三步:调用Jedis的API操作数据库。
public class Test01 {

	public static void main(String[] args) {
		// 声明Jedis对象,通过该对象连接到redis服务器
        Jedis jedis = new Jedis("127.0.0.1",6379);
        // 通过redis取值
        String res = jedis.get("name");
        System.out.println(res);
        // 关闭redis
        jedis.close();
	}
	
}

五、使用连接池

public class Test01 {

	public static void main(String[] args) {
		// 创建JedisPoolConfig对象,该对象保存了连接池的配置信息
		JedisPoolConfig config = new JedisPoolConfig();
		// 设置最大连接数
		config.setMaxTotal(50);
		// 创建JedisPool连接池对象
		JedisPool jedisPool = new JedisPool(config, "192.168.31.20", 6379);
		// 获取Jedis对象
		Jedis jedis = jedisPool.getResource();
		// 添加数据
		jedis.set("name", "mickey");
		// 获取数据
		System.out.println(jedis.get("name"));
		// 关闭jedis
		jedis.close();
		// 关闭连接池
		jedisPool.close();
	}
	
}

连接池参数说明:

参数名参数说明
maxActive控制连接池可分配对象的个数,可以通过pool.getResource()来获取。如果赋值为-1,则表示不限制
maxIdle控制连接池中对象的最大个数
whenExhaustedAction当连接池中的jedis实例都被分配完时,连接池所要采取的策略。默认有三种WHEN_EXHAUSTED_FAIL(表示无jedis实例时,直接抛出NoSuchElementException)、WHEN_EXHAUSTED_BLOCK(则表示阻塞,或者达到maxWait时抛出JedisConnectionException)、WHEN_EXHAUSTED_GROW(则表示新建一个jedis实例,也就说设置的maxActive无用)
maxWait等待连接池返回对象的最长时间。如果超过等待时间,则直接抛出JedisConnectionException
testOnBorrow在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的对象均是可用的
testOnReturn在返回对象给连接池时候,是否需要提前进行validate操作
testWhileIdle如果为true,表示有一个idle object evitor线程对空闲对象进行扫描,如果validate失败,那么该对象就会从连接池中删除掉。这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义
timeBetweenEvictionRunsMillis表示idle object evitor两次扫描之间要相隔的毫秒数
numTestsPerEvictionRun表示idle object evitor每次能够扫描的对象数
minEvictableIdleTimeMillis表示一个对象至少停留在空闲状态的最短时间,然后才能被idle object evitor扫描并驱逐。这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义
lifoborrowObject返回对象时,默认采用DEFAULT_LIFO(last in first out)的策略。如果设置为false,则表示FIFO队列
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值