Redis的扩展和持久化

Redis的扩展和持久化

1、数据结构String


**Key = value ->>  json
赋值
	set key value 
取值
	get key
	getset key value 获得并且重写赋值
删除
	del key
其他
	incr key    
                每一次value值原子性加1  该key可以不存在 不存在默认为0  如果是汉字 报错
	decr key
                每一次value值原子性减1  该key可以不存在 不存在默认为0
	incrby key 数字 
                每一次value值原子性加2  该key可以不存在 不存在默认为0  如果是汉字 报错
	decrby key 数字
                每一次value值原子性减2  该key可以不存在 不存在默认为0
	append key value
		给key 字符串拼接**

2、数据结构Hash

赋值
	hset key filed value 赋值一对键值对
	hmset key filed value [filed value….] 赋值多个
取值
	hget key filed 
	hmget key filed[filed…..] 获得多个值
	hgetall key 获得所有的键值对
删除
	del key 表示删除整个hash
	hdel key filed 
其他
	hincrby  key  filed  数字 给指定的filed 的值 增加指定数字
	hexists key filed 判断字段是否存在
	hlen key   集合的长度
	hkeys key  集合的所有filed
	hvals key  集合的所有value值

3、List

赋值 
	lpush key value[value 1 value 2..] 往链表的左边添加
	rpush key value[value 1 value 2..] 往链表的右边添加
取值
	lrange key start end 查询一定范围 从start开始 到end结束
	end > 0 从左往右
	end < 0 从右往左 
删除
	lpop key 左弹出
	rpop key 右弹出
其他
	llen key 集合长度
	lpushx key value  只能添加一个值 并且key必须存在  左添加
	rpushx key value  只能添加一个值 并且key必须存在   右添加
	lrem key count value  删除key中的几个值
		count > 0 表示从左往右删
		count < 0 表示从右往左删
		count = 0 全部删除
	lset key index value 给指定索引的值 重新覆盖
	linsert key before | after 指定的value值  需要添加的值
		给指定的value值前后增加需要的值
	rpoplpush key1 key2 右弹出 左添加

任务队列(消息队列):

在这里插入图片描述

4、Set

Set 无序 不重复

赋值 
	sad key members[ member1 member2].
取值
	smembers key 获得集合的所有数据
删除
	del key  删除整个key 
	srem key members[member1 member2] 
其他
	sismember key member 判断成员在key中是否存在
 
	集合运算 
差集 diff 
	sdiff key1 key2   key1的集合减去key2 集合
	交集 inter
		sinter key1 key2   key1的集合和key2 集合 重复的部分
	并集 union
		sunion key1 key2   key1的集合和key2 集合 合起来去重
差集 diff  将结果存到newkey中
	sdiffstore newKey key1 key2   key1的集合减去key2 集合
	交集 inter将结果存到newkey中
		sinterstore newKey key1 key2   key1的集合和key2 集合 重复的部分
	并集 union将结果存到newkey中
		sunionstore newKey key1 key2   key1的集合和key2 集合 合起来去重
 
	scard key 查看集合内数量
	srandmember key 返回集合中随机变量
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190923193150277.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JpYW4xNzIx,size_16,color_FFFFFF,t_70)
**应用场景: 账号 , 身份证 , ip地址。开发中用来模拟sessionid**

5、SortedSet

赋值 
	zadd key score1 member1 [score1 member1 ….] 
取值
	zrange key start end [withscores]  表示查看开始到结束  默认排序 分数 升序
	end > 0 从左往右
	end < 0 从右往左 
	zrevrange key start end  [withscores] 表示查看开始到结束  默认排序 分数 升序
	end > 0 从左往右
	end < 0 从右往左 
 
	zrangebyscore key minScore maxScope [withscores] [limit startIndex pageSize] 根据分数取范围
删除
	zrem key member []
其他
	zcard  key  查看长度
	zscore key member  查看成员分数
	zremrangbyrank key start end  删除一定范围数据 根据排名 
	zremrangebyscore key minScore maxScore 删除一定范围数据 根据分数
	zincrby key 分数 成员  给指定成员添加分数
	zcount key minScore maxScore 查看分数范围内的人数
	zrank key 成员 返回成员在集合中的排名 (从小到大)
	zrevrank key 成员 返回成员在集合中的排名 (从大到小)
应用场景: 排行榜 游戏 排名

6、通用操作

keys  * 表示通配符 ? 表示占位符
del key 表示直接删除key
 
exists key 表示key是否存在
rename key newKey 重命名
 
type key 查看key的数据类型
 
expire key 秒  表示是 多少秒 key过期
ttl key 表示查看所剩过期时间
	时间> 0 表示 key还剩存活时间
	时间= -2 表示已经失效 不存在
	时间= -1 表示永不过期
	
用来模拟session  sessionid

7、Jedis

Redis以后在Java中使用 而在中使用称之为jedis 如果在想在java中使用jedis 导入jar包
在这里插入图片描述

8、Jedis的工具类

package com.itheima.utils;
 
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
 
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
 
public class JedisUtils {
	
	private static JedisPool pool = null;
	static {//作用 类被调用 优先执行静态代码块 在静态代码块赋值
		try {
			/**
			 * 1. jedis.properties 所有的key 为什么需要加前缀? 
			 * 	为了区分不同配置
			 * 2. properties 等号前后是否允许有空格  
			 *  允许 但整个字符串的最后不允许  建议 空格全部去掉
			 * 3.如何加载properties?
			 */
			//2.需要properties的文件流
			//当前类.class.getClassloader.getResourceAsStream("名称")
			//类加载器:将文件加载到内存 形成Class对象  
			//类加载器好处 : 保证class对象 在内存中只有一份
			//类加载器机制: 全盘负责 委托机制  
			//类加载器三个  应用类加载器(所有类的当前类.class.getClasLoader()) 扩展类加载器 引导类加载器
			InputStream is = JedisUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
			//1.创建properties
			Properties prop  = new Properties();
			prop.load(is);
			
			System.out.println(prop.get("jedis.maxTotal"));
			
			//2.配置连接池
			JedisPoolConfig poolConfig = new JedisPoolConfig();
			//配置最大连接池
			poolConfig.setMaxTotal(30);
			//配置最大空闲数
			poolConfig.setMaxIdle(10);
			
			String host = "192.168.40.198";
			int port = 6379;//此处需要开放端口号
			pool = new JedisPool(poolConfig, host, port);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 工具类作用:对外提供jedis连接
	 */
	public static Jedis getJedis(){
		return pool.getResource();
	}
	
	public static void main(String[] args) {
		Jedis jedis = JedisUtils.getJedis();
		String ds = jedis.get("ds");
		System.out.println(ds);
	}
}

在这里插入图片描述

9、redis特性

9.1、多数据库概念


默认的一个redis 有 16个数据库 我们操作的是第一个数据库
 
切换数据库 select index
 
移动key  move key index
 
echo 打印内容
 
quit 退出 ctrl + c  exit退出
 
dbsize 查看key的数量
 
info  查看当前配置状态
 
flushdb 删除当前库的所有数据
 
flushall 删除所有库的所有数据

9.2、消息订阅和发布

subscribe 频道号       订阅某个频道
 
psubscribe 频道号*   订阅一组频道
 
publish 频道号 内容  发布

9.3、redis事务

事务: 指逻辑上的一组操作 要么全部成功要么全部失败
 
redis的事务不能称之为事务 我们称呼叫批处理 (批量处理) 如果中有失败的过程 不会回滚
 
multi 开启事务
 
exec提交事务
 
discard 回滚事务

10、redis持久化(了解)

redis以后使用做缓存技术 缓存技术的数据保存在内存中 数据容易丢失
所以redis提供了持久化操作 避免数据的丢失
       redis提供了两套持久化机制
		RDB:快照机制 直接恢复快照(默认)
			优点: 恢复快
			缺点: 数据容易丢失
		AOF:日志机制 将我们的每一个记录行命令 记到一个日志文件中 在启动的时候 将命令重新执行一次
			优点:数据保持完整
			缺点:恢复慢 文件太大
 
		如果需要使用AOF机制 需要手动开启redis配置 需要修改redis.conf配置文件
		AOF机制提供以下三种同步机制:
			每秒同步
			每修改同步
			不同步

在这里插入图片描述
默认关闭 如果需要打开即可
在这里插入图片描述

1.以配置文件的方式打开 redis 开启aof
2.进行操作 set username jack set password rose
3.查看一下 keys *
4.删除所有key flushdb 清空当前的数据库
5.查看一下 keys *
6.关闭redis
7.查看aof日志文件 把flushdb 代码删除
8.重启redis 如果数据回来了 aof机制成功 如果数据没回来 aof机制没用

在这里插入图片描述

验证aof机制:

1.开启redis 往redis存入数据 key *
2.incr age 开始自增
3.key * 查看最后数据
4.flushdb 删除所有的数据
5.key * 查看最后数据 保证删除
6.停止redis 打开日志文件 删除flushdb  数据将会恢复
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值