《商城项目04》--Redis缓存的应用

一, redis的下载安装配置

1, 下载

贴个链接供参考使用:  redis-3.0.0.tar.gz

链接:https://pan.baidu.com/s/1wOBvnCdCm5zjeHRfvadwKQ 
提取码:949t 

2, 安装

<前提是有已安装Linux虚拟机可使用>

2.1  安装gcc编译器

      yum install gcc-c++

2.2  解压redis

      tar -zxvf redis-3.0.0.tar.gz

2.3  编译

       cd redis-3.0.0   -->  make指令 进行编译!

2.4  安装

      make install PREFIX=/usr/local/redis

 

3, 启动redis服务

3.1 前端启动

      cd /usr/local/redis/bin/   --> ./redis-server

3.2 后端启动

   修改配置文件

cd /usr/local/redis/bin/redis.conf (从安装目录usr/redis/redis-3.0.0/redis.conf复制过来)

 --> (daemonize对应的no改成yes)

 --> 指令    ./redis-server redis.conf(后台启动)

3.3  查看是否启动

ps aux|grep redis

root       9389  0.1  0.7 140848  7452 ?        Ssl  16:00   0:00 ./redis-server *:6379

root       9429  0.0  0.0 112676   968 pts/0    R+   16:01   0:00 grep --color=auto redis

3.4  关闭服务

      3.4.1  Kill  9389  <进程号, 不是端口号>

      3.4.2   ./redis-cli  shutdown  <通过客户端关闭>

3.5  启动redis客户端, 连接服务

      ./redis-cli -h 192.168.25.133 -p 6379

 

二, redis的常用语法

1, 先进入redis

1.1   先进入bin目录  cd /usr/local/redis/bin/ 

1.2  然后启动客户端 ./redis-cli

1.3   测试是否启动成功 

       输入指令ping,  若响应PONG则表示启动成功,可以进行相关命令操作;

2, 五种数据类型

2.1 String类型

set str1 abc   -->声明一字符串str1 值为abc

get str1          -->取出变量str1

Keys  *           -->取出所有的key值

Incr  key1       -->给变量key1 +1

Decr key1      -->给变量key1 -1

Del  key2       -->删除变量key2

2.2 hash类型

hset hash1 filed1 1  -->给hash1里的filed1赋值为1

hget hash1 filed1     -->取出hash1里的filed1

hkeys hash1             -->查询hash1里的所有key值

hvals hash1           -->查询hash1里的所有value值

hgetall hash1       -->查询hash1里的所有key-value;

kdel hash1 filed1     --> 删除hash1里的filed1;

2.3 List类型<有序可重复>

lpush list1 a b c d  -->从左添加元素

lrange list1 0 -1  -->从左查询所有数据

rpush list1 1 2 3 4   -->从右...

lrange list1 0 -1       -->从右查询所有数据

Lpop list1   取左起第一个元素

Rpop list1   取右起第一个元素

2.4 Set类型<无序不可重复>

2.5 SortedSet类型<有序不可重复>

## 数据设置过期时间, 以及数据持久化处理

Expire key second:设置key的过期时间

Ttl key:查看key的有效期

Persist key:清除key的过期时间。Key持久化。

3, redis集群的搭建

    略繁琐, 此处省略300字

 

三, redis在java项目中的实际应用

1, 写测试类简单测下

1.1 导包, pom.xml中添加依赖

    <!-- Redis客户端 -->
	<dependency>
		<groupId>redis.clients</groupId>
		<artifactId>jedis</artifactId>
	</dependency>

1.2 写测试方法

    @Test
	public void testJedis() throws Exception {
		// 第一步:创建一个Jedis对象。需要指定服务端的ip及端口。
		Jedis jedis = new Jedis("192.168.25.133", 6379);
		//Jedis jedis = new Jedis("192.168.1.103", 8082);
		// 第二步:使用Jedis对象操作数据库,每个redis命令对应一个方法。
		jedis.set("hello", "this is shanghai!");
		String result = jedis.get("hello");
		// 第三步:打印结果。
		System.out.println(result);
		// 第四步:关闭Jedis
		jedis.close();
	}

运行能正常打印出结果, 则ok

1.3 在项目中的实际应用

1.3.1 配置Spring-redis.xml

1.3.2  调用对应的redis-Bean

调用逻辑大概就是:

第一步: 注入JedisClient

第二步: 根据key查redis中是否存有对应的value值, 存在即返回, 不存在再去查询数据库, 这里起到缓解数据库压力的作用, 实际应用中一般会将经常被访问的一些数据同步到redis缓存中。

下面是封装的redis相关调用类

public interface JedisClient {

	String set(String key, String value);
	String get(String key);
	Boolean exists(String key);
	Long expire(String key, int seconds);
	Long ttl(String key);
	Long incr(String key);
	Long hset(String key, String field, String value);
	String hget(String key, String field);
	Long hdel(String key, String... field);
	
	Boolean hexists(String key, String field);
	List<String> hvals(String key);
	Long del(String key);
}
public class JedisClientPool implements JedisClient {
	
	@Autowired
	private JedisPool jedisPool;
	
	//构建bean额外添加的;  by xiangyoulu 2018/3/18 ;
//	public JedisClientPool(JedisPool jedisPool) {
//		this.jedisPool=jedisPool;
//	}

	@Override
	public String set(String key, String value) {
		Jedis jedis = jedisPool.getResource();
		String result = jedis.set(key, value);
		jedis.close();
		return result;
	}

	@Override
	public String get(String key) {
		Jedis jedis = jedisPool.getResource();
		String result = jedis.get(key);
		jedis.close();
		return result;
	}

	@Override
	public Boolean exists(String key) {
		Jedis jedis = jedisPool.getResource();
		Boolean result = jedis.exists(key);
		jedis.close();
		return result;
	}

	@Override
	public Long expire(String key, int seconds) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.expire(key, seconds);
		jedis.close();
		return result;
	}

	@Override
	public Long ttl(String key) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.ttl(key);
		jedis.close();
		return result;
	}

	@Override
	public Long incr(String key) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.incr(key);
		jedis.close();
		return result;
	}

	@Override
	public Long hset(String key, String field, String value) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.hset(key, field, value);
		jedis.close();
		return result;
	}

	@Override
	public String hget(String key, String field) {
		Jedis jedis = jedisPool.getResource();
		String result = jedis.hget(key, field);
		jedis.close();
		return result;
	}

	@Override
	public Long hdel(String key, String... field) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.hdel(key, field);
		jedis.close();
		return result;
	}
	
	
	@Override
	public Boolean hexists(String key, String field) {
		Jedis jedis = jedisPool.getResource();
		Boolean result = jedis.hexists(key, field);
		jedis.close();
		return result;
	}

	@Override
	public List<String> hvals(String key) {
		Jedis jedis = jedisPool.getResource();
		List<String> result = jedis.hvals(key);
		jedis.close();
		return result;
	}

	@Override
	public Long del(String key) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.del(key);
		jedis.close();
		return result;
	}

}
public class JedisClientCluster implements JedisClient {
	
	@Autowired
	private JedisCluster jedisCluster;

	@Override
	public String set(String key, String value) {
		return jedisCluster.set(key, value);
	}

	@Override
	public String get(String key) {
		return jedisCluster.get(key);
	}

	@Override
	public Boolean exists(String key) {
		return jedisCluster.exists(key);
	}

	@Override
	public Long expire(String key, int seconds) {
		return jedisCluster.expire(key, seconds);
	}

	@Override
	public Long ttl(String key) {
		return jedisCluster.ttl(key);
	}

	@Override
	public Long incr(String key) {
		return jedisCluster.incr(key);
	}

	@Override
	public Long hset(String key, String field, String value) {
		return jedisCluster.hset(key, field, value);
	}

	@Override
	public String hget(String key, String field) {
		return jedisCluster.hget(key, field);
	}

	@Override
	public Long hdel(String key, String... field) {
		return jedisCluster.hdel(key, field);
	}
	
	
	
	@Override
	public Boolean hexists(String key, String field) {
		return jedisCluster.hexists(key, field);
	}

	@Override
	public List<String> hvals(String key) {
		return jedisCluster.hvals(key);
	}

	@Override
	public Long del(String key) {
		return jedisCluster.del(key);
	}

}

ok, 是有点略繁琐。。。

猜你喜欢

转载自blog.csdn.net/weixin_39039342/article/details/83929776