Redis学习总结

1.关系型数据库(SQL):
	数据和数据之间,表和字段之间,表和表之间是存在关系的
	例如:	部门表的001部门和员工表存在关系
			用户表中用户名,密码
			商品表和分类表
	关系型数据库的优点:
		1.数据之间有关系,进行数据的增删改查时方便
		2.关系型数据库有事务操作,保证数据的完整性
	关系型数据库的缺点:
		1.因为数据和数据之间有关系,关系是由底层大量算法保证,大量算法会拉低系统的运行速度,消耗系统资源
		2.海量数据的增删改查时显得无能为力。很可能宕机
		3.海量数据的环境下,对数据表的维护也会变得无能为力,很难成功
	总结:关系型数据库适合处理一般量级的数据,特点是安全;
2.非关系型数据库(NOSQL–不仅仅是SQL):
	为了处理海量数据,需要将关系型数据库的关系去除,衍生出非关系型数据库	
	非关系型数据库设计之初是为了替代关系型数据库的
	非关系型数据库的优点:
		1.海量数据的增删改查非常轻松
		2.海量数据的维护非常轻松
	非关系型数据库的缺点:
		1.数据和数据之间没有关系,不能一目了然
		2.非关系型数据库没有关系,没有强大的事物保证数据的完整和安全
	总结:非关系型数据库适合处理海量数据,不一定安全。
3.关系型数据库+非关系型数据库====>>>>项目
   重要的数据        	非重要的数据
4.NOSQL的分类
	1.键值对(Key-Value)存储数据库
		相关产品:Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
		典型应用:内容缓存、主要用于处理大量数据的高访问负载
		数据模型:一系列键值对
		优势:优秀的快速查询,稳定性强
		劣势:存储的数据缺少结构化
	2.列存储数据库
		相关产品:Cassandra、HBase、Riak
		典型应用:分布式的文件系统
		数据模型:以列簇式存储,将同一列数据存在一起
		优势:查找速度快,可扩展性强,更容易进行分布式扩展
		劣势:功能相对有限,使用极大的内存才可调配,且系统处理算法时将有数秒的时间不可用,导致大量处理超时
	3.文档型数据库(淘汰)
		相关产品:CouchDB、MongoDB
		典型应用:Web应用(与Key-Value类似、value是结构化的)
		数据模型:一系列键值对
		优势:数据结构要求不严格
		劣势:查询性能不高,缺乏统一的查询方法
	4.图形(Graph)数据库
		相关数据库:Neo4J、InfoGrid、Infinitie Graph
		典型应用:社交网络【关系网】
		数据模型:图结构
		优势:利用图结构相关算法
		劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案,局限性强。
5.Redis使用环境
	1.关系型数据库的缓存存在
	2.任务队列
	3.大量数据运算
	4.排行榜,Redis非常擅长做大量数据的运用
6.Redis安装和启动
	1.linux环境
		1.安装
			1.安装gcc: yum install gcc-c++
			2.上传压缩包到linux系统并解压 tar -zxvf redis-4.0.10.tar.gz
			3.进入解压出来的目录,进行编译  
				cd redis-4.0.10
				make
			4.编译完成后进行安装
				make PREFIX=/usr/local/redis install
				客户端:redis-cli
				服务端:redis-server
			5.到编译目录中复制配置文件redis.conf到/usr/local/redis
				cp redis.conf /usr/local/redis
				如果没有配置文件也可以启动,但是会使用默认配置,不方便我们修改端口号等信息
		2.启动
			1.前端启动(了解,无法部署集群):
				1.进入Redis文件目录
					1.启动服务端:./bin/redis-server
					2.启动客户端链接redis:./bin/redis-cli
			2.后端启动
				修改配置文件redis.conf,daemonize 设置成:daemonize yes	
				加载配置文件启动:./bin/redis-server ./redis.conf
		3.服务器关闭:
			1.PID:kill -9 pid 断电,非正常关闭,一般不用,否则可能会造成数据丢失
			2.正常关闭: ./bin/redis-cli shutdown	(正常使用)
	2.Windows环境
7.Redis的数据类型
	redis使用键值对,保存数据。(map集合)
	key:全部是字符串
	value:有5种数据类型
		1.String	字符串
		2.hash		{uname:"zhangsan",age:"18"}
		3.list		[1,2,3,4,5]	=== java的LinkedList
		4.set		['a','b','c']	 === java的HashSet
		5.有序的set	[5000'a',1000'b',10'c']  类似排行榜

	key名不要过长,否则影响使用效率
	key名不要太短,最好是有意义的
8.redis命令-String命令
	1.字符串类型是Redis中最为基础、常用的数据存储类型,字符串在Redis中是二进制安全的,这便意味着该类型存入和获取的数据是相同的。
	Redis中字符串类型的Value最多可以容纳的数据长度是512M
	2.二进制安全和数据安全是没有关系的
		Mysql-关系型数据库,二进制不安全。  【乱码丢失数据】
	3.Redis编码和解码都只会发生在客户端,因为项目的编码没有发生改变,所以不会出现乱码问题,除非项目的编码方式发生改变

	4.命令
		赋值操作:
			set key value		key值如果存在,则value会覆盖
		取值操作:
			get key
		修改操作:
			set key value		key值如果存在,则value会覆盖
		删除操作:
			del key

		扩展命令:
			1.getset key value:先获取该key的值,然后在设置key的值
			2.incr key:将指定key的value原子性的递增1,如果该key不存在,其初始值为0,在incr之后其值为1.
			如果value的值不能转成整形,如hello,该操作将执行失败并返回相应的错误信息。相当于java的++i
			3.decr key:相当于--i
			4.append key value:在value后面追加字符串
			5.incrby key 步长:指定步长的递增 
			6.decrby key 步长:指定步长的递减

		String使用环境:
			主要用于保存json格式的字符串
9.redis命令-Hash命令
	1.Redis中的Hash类型可以看成具有String Key和String value的map容器。所以该类型非常适合于存储值对象的信息。
	如Username、password和age等。如果hash中包含很少的字段,那么该类型的数据也将占用很少的磁盘空间。
	每一个Hash可以存储4294967295个键值对。
	2.Hash   ---->   {username:"zhangsan",age:"18"}	特点:占用的空间较少
	3.命令
		1.赋值:
			1.hmset key field1 value2 [field2 value2 .....]
			2.hset key field value
		2.取值:
			1.hget key field1...	获取指定字段
			2.hgetall key		获取全部字段
		3.删除
			1.del key field1...	删除指定字段
			2.del key		删除全部字段
10.redis命令参考:http://redisdoc.com/index.html
11.Jedis
	1.Maven依赖
		<!-- Jrdis -->
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
		</dependency>
	2.链接代码
		@Test
		public void fun1(){
			Jedis jedis = new Jedis("192.168.214.128", 6379);
		//	jedis.set("username", "admin");
			System.out.println(jedis.get("username"));
		}

	3.使用连接池的连接工具
		/**连接池*/
		private final static JedisPool POOL;
		/**初始化*/
		static {
			JedisPoolConfig config = new JedisPoolConfig();
			config.setMaxTotal(50);
			config.setMaxIdle(10);
			POOL = new JedisPool(config,"192.168.214.128", 6379);
		}
		/**获取连接对象*/
		public Jedis getJedis(){
			return POOL.getResource();
		}
	4.Redis中的每个指令在Jedis中都有对应的方法与之对应,可直接使用
12.Redis的list集合
	1.在Redis中比较多的操作是对海量数据的增删,所以Redis中的List使用的是链表的形式,而不使用数组
	2.Redis中的List使用环境
		1.做大数据集合的增删
		2.任务队列
	3.赋值:
		lpush key value1 value2...	向头部插入
		rpush key value1 value2...	从尾部插入
	4.取值:
		lrange key start end :获取链表中从start到end的元素的值,start、end从0开始计数,也可为负数,若为-1表示链表的元素
	5.删除(弹出):
		lpop key :从头部开始弹出
		rpop key :从尾部弹出
	6.扩展命令
		1.获取list的长度: llen key
		2.删除链表中指定的元素: lrem key 0 a		
			---从0开始删除list中的a
			---如果count小于0,那么从尾向头遍历并删除 -count个
			---如果count大于0,那么从头向尾遍历并删除 +count个
		3.插入
			linsert key before aa cc  :在aa之前插入cc
		4.rpoplpush key1 key2	从key1弹一个元素出去,加入到key2的头部
		5.循环链表:rpoplpush key key
13.Redis的set集合
	Java中的HashSet集合是无序且不重复的,在Redis中也是一样的,set集合可以存4个多亿个元素
	Redis操作中,涉及到两个大数据集合的差集、交集、并集的运算使用Redis的Set集合做
	1.赋值:
		sadd key value1 value2...
	2.删除
		srem key value1 value2...
	3.取值
		smembers key:查询所有元素
		sismember key member:判断member是否存在
	4.差集运算
		sdiff set1 set2		属于set1且不属于set2
	5.交集运算
		sinter set1 set2	同属数据set1和set2
	6.并集
		sunion set1 set2	属于set1或者set2
	7.扩展命令
		scard key	统计集合元素总数
		srandmember key	随机返回一个元素(伪随机)
		sunionstore key1 key2 key3	查询key1和key2的并集,并存储到key3中
14.Redis的有序set集合
	1.有序且不重复,每个元素都需要手动赋予分数,专门用于制作排行榜
	2.赋值
		zadd key score value1 score value2...
	3.删除
		zrem key member1 member2....	删除指定元素
	4.取值
		zscore key member:返回指定成员的分数
		zcard key :获取集合中的成员数量
	5.范围查询
		zrange key start end [withscores]
		zrevrange key start end [withscores]
15.Redis通用命令
	1.keys pattern:获取所有与pattern匹配的key
		通配符:* == %		? == _
			*:匹配多个字符
			?:匹配单个字符
	2.del key1...		删除命令
	3.exists key		判断key是否存在
	4.rename key newkey	修改key的名字
	5.type key		判断key对应的是什么数据类型,如果是有序set会返回zset
	6.expire key time	设置key的过期时间(生存时间)单位秒
	7.ttl key		获取剩余生存时间
16.消息的订阅与发布
	1.subscribe channel:订阅频道,例:subscribe mychat,订阅mychat这个频道
	2.psubscribe channel*:批量订阅频道,例:psubscribe s*,订阅以s开头的频道
	3.publish channel content:在指定的频道中发布消息,如:publish mychat ‘today is a newday’
17.多数据库
	1.redis的数据库已经提前创建好了,默认有16个数据库,0-15数据库,在redis上所做的所有操作都是在0号数据库
	2.切换数据库:select 数据库名
	3.数据移植:move key 数据库号
	4.清空
		flushdb:清空当前数据库
		flushall:清空所有数据库中的数据
18.事务(批量操作)
	1.redis事物:为了进行redis语句的批量化执行
	2.指令:
		multi:开启事务,用于标记事务的开始,其后执行的命令都将被存入命令队列,知道执行EXEC时,这些命令才会被
		原子的执行。
		exec:提交事务
		discard:事务回滚
	3.Redis事务中执行失败不会回滚
19.reids其他命令
	1.ping			测试是否连接成功
	2.echo  		在命令行打印一些信息
	3.select 数据库号	切换数据库
	3.quit==ctrl+c		退出客户端
	4.dbsize		返回当前数据库的所有键的数量
	5.info			返回redis的配置数据等
	6.flushdb:清空当前数据库
	7.flushall:清空所有数据库中的数据
20.redis持久化
	1.持久化:把数据保存在硬盘上,redis的数据默认是保存在内存中,断电以后redis的部分数据会丢失
	2.redis的持久化策略:
		1.RDB:是redis的默认持久化策略
			RDB相当于照快照,保存的是一种状态。

			优点:	1.快照保存数据快,还原速度快
				2.适用于灾难备份
			缺点:
				1.RDB机制符合要求就会照快照,会突然占用一部分系统资源,很可能会因为内存不足宕机
				2.小内存的机器不适合使用,适合内存充裕的计算机
			
			服务器正常关闭时照快照:
				./bin/redis-cli shutdown
			key满足一定条件时找快照:
				在配置文件中:
				save 900 1	900秒内有1个key发生变化就照快照
				save 300 10	300秒内有10个key发生变化就照快照
				save 60  10000	60秒内有10000个key发生变化就照快照

		2.AOF:	使用日志功能保存数据操作
			1.策略
				默认AOF机制是关闭的
				1.每秒同步(默认):每秒进行一次AOF保存数据,安全性低,比较节省系统资源
				2.每修改同步:只要有key变化就保存,比较安全,但是极为浪费资源
				3.不同步:不进行任何持久化操作,不安全
			2.AOF的配置
				修改配置文件	appendfsync
					# appendfsync always	每秒同步
					appendfsync everysec	每修改同步
					# appendfsync no	不同步
			3.优缺点:
				1.优点
					持续性占用极小的内存资源
				2.缺点
					日志文件会特别大(因为一个数据可能是由很多条语句记录的,不适用与灾难恢复)
					还原数据需要执行每条redis命令
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值