redis 对应Java的操作

导读:本篇文章讲解 redis 对应Java的操作,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

redis

一、redis简介

​ redis是开放源代码的内存数据结构存储,用作数据库,缓存和消息代理。Redis提供数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,地理空间索引和流。redis具有内置的复制,Lua脚本,LRU逐出,事务和不同级别的磁盘持久性,并通过以下方式提供高可用性Redis SentinelRedis Cluster自动分区。

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

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

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

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

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

2.redis优点:

性能极高:Redis能读的速度是110000次/s,写的速度是81000次/s。

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

原子:Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

丰富的特性:Redis还支持publicsh/subscribe,通知key过期等等特性。

3.Redis与其他key-value存储有什么不同?

Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存,在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

二、redis安装

1.Window 下安装

下载地址:https://github.com/dmajkic/redis/downloads

​ 下载到的Redis支持32bit和64bit。根据自己实际情况选择,将64bit的内容cp到自定义盘符安装目录取名redis。 如 C:\reids打开一个cmd窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.conf

2. Linux 下安装

下载地址:http://www.redis.net.cn/download/,下载最新文档版本。

本教程使用的最新文档版本为 2.8.17,下载并安装:

$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz$ tar xzf redis-2.8.17.tar.gz$ cd redis-2.8.17$ make

make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli

下面启动redis服务.

$ ./redis-server

注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。

$ ./redis-server redis.conf

redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。

启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:

$ ./redis-cliredis> set foo barOKredis> get foo"bar"

三、redis-cli操作五种数据类型

1.String

set:添加一条String类型数据

Get: 获取一条String类型数据

Mset:添加多条String类型数据

Mget:获取多条String类型数据

2.Hash

Hset:添加一条hash类型数据

Hget:获取一条hash类型数据

Hmset:添加多条hash类型数据

Hmget:获取多条hash类型数据

HgetAll:获取指定所有hash类型数据

Hdel:删除指定hash类型数据

3.List

Lpush:左添加头list类型数据

Rpush: 右添加尾类型数据

Lrange:获取list类型数据 start 起始下标 end 结束下标 包含关系

llen: 获取条数

lrem: 删除列表中几个指定list类型数据

3.Set

Sadd:添加 set 类型数据 Smembers 获取 set 类型数据

scard: 获取条数 srem: 删除数据

4.Sorted set

sorted set 是通过分数值来进行排序的,分数值越大,越靠后。

Zadd:添加 sorted set 类型数据

Zrange:获取 sorted set 类型数据

zcard:获取条数

zrem:删除数据

Redis中以层级关系、目录形式存储数据

mset user:01 zhangsan 设置数据

mget user:01 获取数据

删除

Del:用于删除数据(通用,适用于所有数据类型)

Hdel:用于删除 hash 类型数据

四、Java使用redis

1.jedis使用Redis

添加依赖 pom.xml
<dependency>

	<groupId>org.springframework.boot</groupId> 

	<artifactId>spring-boot-starter-data-redis</artifactId> 

	<!--

	1.x 的版本默认采用的连接池技术是 Jedis, 

	2.0 以上版本默认连接池是 Lettuce, 

	如果采用 Jedis,需要排除 Lettuce 的依赖。 

	--> 
	<exclusions> 

		<exclusion> 

			<groupId>io.lettuce</groupId> 

			<artifactId>lettuce-core</artifactId> 

		</exclusion> 

	</exclusions> 

</dependency> 

<!-- jedis 依赖 --> 

<dependency> 

	<groupId>redis.clients</groupId> 

	<artifactId>jedis</artifactId> 

</dependency>

配置文件application.yml
spring: 
	redis:
		# Redis服务器地址 
		host: 192.168.10.100 
		# Redis服务器端口 
		port: 6379 
		# Redis服务器端口 
		password: root 
		# Redis服务器端口
		database: 0 
		# 连接超时时间 
		timeout:10000ms 
		lettuce: 
			pool:
				# 最大连接数,默认8 
				max-active: 1024 
				# 最大连接阻塞等待时间,单位毫秒,默认-1ms 
				max-wait: 10000ms 
				# 最大空闲连接,默认8 
				max-idle: 200 
				# 最小空闲连接,默认0 
				min-idle: 5 
redis连接
/** 
\* 直接创建jedis客户端 
*/ 
@Test 
public void initConnt01() { 
	//创建jedis客户端 
	Jedis jedis = new Jedis("192.168.10.100", 6379); 
	//设置连接密码 
	jedis.auth("root"); 
	//测试是否连接成功 
    String pong = jedis.ping(); 
	System.out.println(pong); 
	//string set 
	jedis.set("name", "zhangsan"); 
	//string get 
	String name = jedis.get("name"); 
	System.out.println(name);
    
	if (null != jedis) { 
		jedis.close(); 
	} 
}
封装JedisUtil对外提供连接对象获取方法
/**
\* Redis配置 
*/ 
@Configuration 
public class RedisConfig { 
    //服务器地址 
    @Value("${spring.redis.host}") 
    private String host; 
	//端口 
	@Value("${spring.redis.port}") 
	private int port; 
	//密码 
	@Value("${spring.redis.password}") 
	private String password; 
	//超时时间 
	@Value("${spring.redis.timeout}") 
	private String timeout; 
	//最大连接数 
    @Value("${spring.redis.jedis.pool.max-active}") 
	private int maxTotal;
	 //最大连接阻塞等待时间 
	@Value("${spring.redis.jedis.pool.max-wait}") 
    private String maxWaitMillis; 
	//最大空闲连接 
	@Value("${spring.redis.jedis.pool.max-idle}") 
	private int maxIdle; 
	//最小空闲连接 
	@Value("${spring.redis.jedis.pool.min-idle}") 
	private int minIdle; 
	@Bean 
	public JedisPool getJedisPool(){ 

		JedisPoolConfig poolConfig = new JedisPoolConfig(); 

		poolConfig.setMaxTotal(maxTotal); 
				poolConfig.setMaxWaitMillis(Long.valueOf(maxWaitMillis.substring(0,maxWaitMillis.lengt 

h()-2)));
	poolConfig.setMaxIdle(maxIdle); 
	poolConfig.setMinIdle(minIdle); 
	return new 
JedisPool(poolConfig,host,port,Integer.valueOf(timeout.substring(0,timeout.length()-2)),password); 

	} 
}
操作数据类型
@Test 

public void testString() { 

	//set 设值,单条数据 

	jedis.set("hehe", "heihei"); 

	//get 取值,单条数据 

	String hehe = jedis.get("hehe"); 

	System.out.println(hehe); 

	//mset 设值,多条数据 

	jedis.mset("xixi", "lala", "hengheng", "honghong"); 

	//mget 取值,多条数据 

	List<String> mget = jedis.mget("xixi", "hengheng"); 

	mget.forEach(e -> System.out.println(e)); 

	//删除 

	jedis.del("hengheng"); 

}
/**
\* 操作hash 
*/
@Test 

public void testHash() { 
	//hset 设值,单条数据 
	jedis.hset("user", "name", "zhangsan"); 
	//hget 取值,单条数据 
	String hget = jedis.hget("user", "name"); 
	System.out.println(hget); 
	//hmset 设值,多条数据 
	Map<String, String> map = new HashMap<>(); 
	map.put("age", "20"); 
	map.put("address", "sh"); 
	jedis.hmset("user", map); 
	//hmget 取值,多条数据 
	List<String> hmget = jedis.hmget("user", "name", "age"); 
	hmget.forEach(e -> System.out.println(e)); 
	//hgetALl 取值,获取整个hash 
	Map<String, String> map1 = jedis.hgetAll("user"); 
	for (Map.Entry<String, String> entry : map.entrySet()) { 

		System.out.println(entry.getKey() + "---->" + entry.getValue()); 

	}
	//hdel 删除 
	jedis.hdel("user", "address", "age"); 

}
....

2.lettuce连接Redis

添加依赖
<!--redis 依赖--> 
<dependency> 
	<groupId>org.springframework.boot</groupId> 
	<artifactId>spring-boot-starter-data-redis</artifactId> 
</dependency> 
配置文件
spring: 
	redis:
		# Redis服务器地址 
		host: 192.168.10.100 
		# Redis服务器端口 
		port: 6379 
		# Redis服务器端口 
		password: root 
		# Redis服务器端口
		database: 0 
		# 连接超时时间 
		timeout:10000ms 
		lettuce: 
			pool:
				# 最大连接数,默认8 
				max-active: 1024 
				# 最大连接阻塞等待时间,单位毫秒,默认-1ms 
				max-wait: 10000ms 
				# 最大空闲连接,默认8 
				max-idle: 200 
				# 最小空闲连接,默认0 
				min-idle: 5 
redis连接
/**
\* Redis配置 
*/ 
@Configuration 
public class RedisConfig { 
    @Bean 
    public RedisTemplate<String,Object> redisTemplate(LettuceConnectionFactory redisConnectionFactory){ 
	RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>(); 
	//为string类型key设置序列器 
	redisTemplate.setKeySerializer(new StringRedisSerializer()); 
	//为string类型value设置序列器 
	redisTemplate.setValueSerializer(new 	GenericJackson2JsonRedisSerializer()); 
	//为hash类型key设置序列器 
	redisTemplate.setHashKeySerializer(new StringRedisSerializer()); 
	//为hash类型value设置序列器 
	redisTemplate.setHashValueSerializer(new 	GenericJackson2JsonRedisSerializer()); 
	redisTemplate.setConnectionFactory(redisConnectionFactory); 
	return redisTemplate; 
}
操作数据
/** 
\* string操作 
*/ 
@Test 
public void testString(){ 
	ValueOperations<String,Object> stringObjectValueOperations=redisTemplate.opsForValue(); 
	//设置,单条数据 
	stringObjectValueOperations.set("name","zhangsan"); 
	//取值,单条数据 
	String name= (String) stringObjectValueOperations.get("name"); 
	//设置,多条数据 
	Map<String,String> map=new HashMap<>(); 
	map.put("age","20");map.put("address","jx"); 
	stringObjectValueOperations.multiSet(map); 
	//取值 多条数据 
	List<String> keys=new ArrayList<>(); 
	keys.add("name"); 
	keys.add("age"); 
    keys.add("address"); 
    List<Object> list = stringObjectValueOperations.multiGet(keys); 
    list.forEach(System.out::println); 
    //层级目录 
    stringObjectValueOperations.set("user:01","yangyang"); 
}
.....

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/121441.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!