如何申请一个网站域名做婚恋网站
redis
- 1、redis安装与启动服务
 - 2、redis数据类型
 - 3、redis常用命令
 - 3.1 字符串String
 - 3.2 哈希Hash
 - 3.3 列表List
 - 3.4 集合Set(无序)
 - 3.5 有序集合zset
 - 3.6 通用命令
 
- 4、使用Java操作Redis
 - 4.1 环境准备
 - 4.2 Java操作字符串String
 - 4.3 Java操作哈希Hash
 - 4.4 Java操作列表List
 - 4.5 Java操作集合Set(无序)
 - 4.6 Java操作有序集合zset
 - 4.7 Java实现Redis常用命令
 
redis是基于内存的key-value结构的数据库。
1、redis安装与启动服务
安装redis主需要将下载好的redis压缩包解压到无中文的目录中即可。
启动服务打开命令行窗口,通过cd命令进入redis安装目录。或者在资源管理器中先进入redis安装目录,然后再该目录中打开命令行窗口。输入如下命令启动redis服务:
redis-server.exe redis.windows.conf
 

 关闭服务按Ctrl + C
通过客户端连接redis服务。在安装目录中重新打开一个命令行窗口。由于redis默认是没有密码的,所以可以直接输入如下命令:
redis-cli.exe
 
设置redis密码。打开redis配置文件redis.windows.conf,找到配置密码命令,大概在443行。取消注释,将foobared替换成自己的密码,保存文件,重新启动服务即可。
requirepass foobared
 
设置密码之后重新通过客户端连接redis服务需要加上密码,完整命令为:
// -h 指定主机地址 -p 指定端口 -a redis密码
redis-cli.exe -h localhost -p 6379 -a 123456
 
可以通过redis客户端可视化软件连接redis服务,简化redis操作。
2、redis数据类型
redis有5种常用数据类型。
| 数据类型 | 特点 | 
|---|---|
| 字符串(String) | 普通字符串,Redis中最简单的数据类型 | 
| 哈希(hash) | 也叫散列,类似于Java中的HashMap结构 | 
| 列表(list) | 按照插入顺序排列,可以有重复元素,类似于Java中的LinkedList | 
| 集合(set) | 无序集合,没有重复元素,类似于Java中的HashSet | 
| 有序集合(sorted set / zset) | 集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素 | 

3、redis常用命令
3.1 字符串String
| 命令 | 说明 | 
|---|---|
| SET key value | 设置指定key的值 | 
| GET key | 获取指定key的值 | 
| SETEX key seconds value | 设置指定key的值,并将key的过期时间设为seconds秒 | 
| SETNX key value | 只有在key不存在时设置key的值 | 
3.2 哈希Hash
Redis hash是一个 String 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
| 命令 | 说明 | 
|---|---|
| HSET key field value | 将哈希表key中的字段field的值设为value | 
| HGET key field | 获取存储在哈希表中指定字段的值 | 
| HDEL key field | 删除存储在哈希表中的指定字段 | 
| HKEYS key | 获取哈希表中的所有字段 | 
| HVALS key | 获取哈希表中的所有值 | 
3.3 列表List
| 命令 | 说明 | 
|---|---|
| LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 | 
| LRANGE key start stop | 获取列表指定范围内的元素,查询所有元素start=0,stop=1 | 
| RPOP key | 移除并获取列表最后一个元素 | 
| LLEN key | 获取列表长度 | 
3.4 集合Set(无序)
| 命令 | 说明 | 
|---|---|
| SADD key member1 [member2] | 向集合添加一个或多个成员 | 
| SMEMBERS key | 返回集合中的所有成员 | 
| SCARD key | 获取集合的成员数 | 
| SINTER key1 [key2] | 返回给定所有集合的交集 | 
| SUNION key1 [key2] | 返回所有给定集合的并集 | 
| SREM key member1 [member2] | 删除集合中一个或多个成员 | 
3.5 有序集合zset
| 命令 | 说明 | 
|---|---|
| ZADD key score1 member1 [score2 member2] | 向有序集合添加成员 | 
| ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合中指定区间内的成员 | 
| ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量increment | 
| ZREM key member [member…] | 移除有序集合中的一个或多个成员 | 
3.6 通用命令
| 命令 | 说明 | 
|---|---|
| KEYS pattern | 查找所有符合给定模式(pattern)的key | 
| EXISTS key | 检查给定key是否存在 | 
| TYPE key | 返回key所储存的值的类型 | 
| DEL key | 该命令用于在key存在时删除key | 
4、使用Java操作Redis
Redis的Java客户端有很多种,这里介绍Spring Data Redis。
 Spring Data Redis是Spring的一部分,对Redis底层开发包进行了高度封装。在Spring项目中,可以使用Spring Data Redis来简化操作。
4.1 环境准备
- 引入Redis依赖
 
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
 
- 在配置文件中配置Redis数据源
host:主机地址;port:Redis端口号;password:Redis密码;database:数据库0-15 
spring:redis:host: localhostport: 6379password: 123456database: 0
 
- 编写配置类
 
@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { // 注入Redis连接工厂对象log.info("开始创建RedisTemplate对象...");RedisTemplate redisTemplate = new RedisTemplate();// 设置redis的连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);// 设置redis key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}
 
- 通过注入RedisTemplate 对象操作Redis。
 
// 注入RedisTemplate 对象
@Autowired
private RedisTemplate redisTemplate;
 
4.2 Java操作字符串String
| 说明 | 方法 | 
|---|---|
| 获取操作 String 的对象 | opsForValue() | 
| 设置指定key的值 | set(key, value) | 
| 获取指定key的值 | get() | 
| 设置指定key的值,并设置key的过期时间 | set(key, value, 时间, 单位) | 
| 只有在key不存在时设置key的值 | setIfAbsent(key, value) | 
Java代码示例:
ValueOperations valueOperations = redisTemplate.opsForValue();  // 获取操作 String 的对象
valueOperations.set("city", "beijing");  						// SET key value
String city = (String) valueOperations.get("city");  				// GET key
System.out.println(city);valueOperations.set("code", "123456", 60, TimeUnit.SECONDS); 	// SETEX key seconds value
valueOperations.setIfAbsent("lock", 1);  						// SETNX key value
valueOperations.setIfAbsent("lock", 2);
 
4.3 Java操作哈希Hash
| 说明 | 方法 | 
|---|---|
| 获取操作 hash 的对象 | opsForHash() | 
| 将哈希表key中的字段field的值设为value | put(key, field, value) | 
| 获取存储在哈希表中指定字段的值 | get(key, field) | 
| 删除存储在哈希表中的指定字段 | delete(key, field) | 
| 获取哈希表中的所有字段 | keys(key) | 
| 获取哈希表中的所有值 | values(key) | 
Java代码示例:
HashOperations hashOperations = redisTemplate.opsForHash();  // 获取操作 hash 的对象
hashOperations.put("100", "name", "Tom");  				// HSET key field value
hashOperations.put("100", "age", "20");
String name = (String) hashOperations.get("100", "name");  // HGET key field
System.out.println(name);Set keys = hashOperations.keys("100"); 					// HKEYS key
System.out.println(keys);
List values = hashOperations.values("100");  				// HVALS key
System.out.println(values);
hashOperations.delete("100", "name");  					// HDEL key field
 
4.4 Java操作列表List
| 说明 | 方法 | 
|---|---|
| 获取操作 list 的对象 | opsForList() | 
| 将一个或多个值插入到列表头部 | leftPushAll(key, value1, value2) | 
| 插入单个值 | leftPush(key, value) | 
| 获取列表指定范围内的元素,查询所有元素start=0,stop=1 | range(key, start, stop) | 
| 移除并获取列表最后一个元素 | rightPop(key) | 
| 获取列表长度 | size(key) | 
Java代码范例:
ListOperations listOperations = redisTemplate.opsForList();  // 获取操作 list 的对象
listOperations.leftPushAll("mylist", "a", "b", "c");  	// LPUSH key value1 [value2] 插入多个值
listOperations.leftPush("mylist", "d");  			// LPUSH key value1 插入单个值List mylist = listOperations.range("mylist", 0, -1); 	// LRANGE key start stop
System.out.println(mylist);listOperations.rightPop("mylist"); 				// RPOP keyLong size = listOperations.size("mylist");			 // LLEN key
System.out.println(size);
 
4.5 Java操作集合Set(无序)
| 说明 | 方法 | 
|---|---|
| 获取操作 set 的对象 | opsForSet() | 
| 向集合添加一个或多个成员 | add(setKey, member1, member2) | 
| 返回集合中的所有成员 | members(setKey) | 
| 获取集合的成员数 | size(setKey) | 
| 返回给定所有集合的交集 | intersect(setKey1, setKey2) | 
| 返回所有给定集合的并集 | union(setKey1, setKey2) | 
| 删除集合中一个或多个成员 | remove(setKey, member1, member2) | 
Java代码范例:
SetOperations setOperations = redisTemplate.opsForSet();  // 获取操作 set 的对象
setOperations.add("set1", "a", "b", "c", "d");  			// SADD key member1 [member2]
setOperations.add("set2", "a", "b", "x", "y");Set set1Members = setOperations.members("set1");  	// SMEMBERS key
System.out.println(set1Members);Long set1Size = setOperations.size("set1"); 	 		// SCARD key
System.out.println(set1Size);Set intersect = setOperations.intersect("set1", "set2");  	// SINTER key1 key2 [key3]
System.out.println(intersect);Set union = setOperations.union("set1", "set2");  		// SUNION key1 key2 [key3]
System.out.println(union);setOperations.remove("set1", "a");  					// SREM key member1 [member2]
 
4.6 Java操作有序集合zset
| 命令/说明 | 方法 | 
|---|---|
| 获取操作 zset 的对象 | opsForZSet() | 
| 向有序集合添加成员 | add(zsetKey, member, score) | 
| 通过索引区间返回有序集合中指定区间内的成员 | range(zsetKey, start, stop) | 
| 有序集合中对指定成员的分数加上增量increment | incrementScore(zsetKey, member, increment) | 
| 移除有序集合中的一个或多个成员 | remove(zsetKey, member1, member2) | 
Java代码范例:
ZSetOperations zSetOperations = redisTemplate.opsForZSet();	// 获取操作 zset 的对象
zSetOperations.add("zset1", "a", 10);  			// ZADD key score member1 
zSetOperations.add("zset1", "b", 12);
zSetOperations.add("zset1", "c", 9);Set zset1 = zSetOperations.range("zset1", 0, -1); 	// ZRANGE key start stop 
System.out.println(zset1);zSetOperations.incrementScore("zset1", "c", 10);  	// ZINCRBY key increment memberzSetOperations.remove("zset1", "a", "b");  		// ZREM key member1 [member2]
 
4.7 Java实现Redis常用命令
通用操作直接使用redisTemplate对象。
| 说明 | 方法 | 
|---|---|
| 查找所有符合给定模式(pattern)的key | keys(“给定的模式”) | 
| 检查给定key是否存在 | hasKey(key) | 
| 返回key所储存的值的类型 | type(key) | 
| 该命令用于在key存在时删除key | delete(key) | 
Java代码范例:
// 通用操作直接使用redisTemplate对象
Set keys = redisTemplate.keys("*");  // KEYS pattern
System.out.println(keys);Boolean name = redisTemplate.hasKey("name");  // EXISTS keyfor(Object key : keys){DataType type = redisTemplate.type(key);  // TYPE keySystem.out.println(type.name());
}redisTemplate.delete("mylist");  // DEL key
