Redis基础学习笔记

NoSql+Redis学习笔记

 

1.     NoSql:非结构化数据库。数据库引擎、表锁、行锁、分表、分库(属于数据库集群)

2.     NoSql:一秒读数据11万次,写数据8万次。

3.     678mongdb、memcache(高速缓存)、redis(数据类型丰富)redis说白了就是(kv+cache+persistence)

4.     bson     =json构建nosql数据模型。

5.     NoSql数据模型四大分类分为:kv键值、文档数据库(Bson用的比较多,基于MongoDB)、列存储数据库(列族基于Hbase)、图关系数据库(图形)。

6.     传统的关系型数据库分别是ACID:原子性、一致性、独立性、持久性。Nosql分别是CAP:强一致性、可用性、分区容错性,但是只能三选二

7.     Redis:是kv高性能的分布式内存数据库,基于内存,并支持持久化的nosql数据库。它的特点

a)      redis支持数据的持久化,可将内存中数据存在硬盘上

b)     支持的数据格式多、复杂。除了kv之外还有list、set、zset、hash等

c)      支持数据备份,master-slave模式的数据备份

8.     安装redis,只需要进入redis解压后的文件路径,执行make指令就行了。

9.     Redis安装之前,如果没有安装gcc,需要先安装gcc,安装好gcc之后可能会报错:Jemalloc/jemalloc.h没有那个文件,这个时候只需要运行makedisclean之后再次运行make就行了,安装成功之后会提示Hint:It's a good idea to run 'make test' ;)最后还有一步,需要到redis-server文件下去执行make install(默认在安装redis的src文件夹下面),才能启动服务,如果还是启动不了,需要软连接启动服务,操作如下。

a)      # redis-server  redis.conf提示错误 -bash :redis-server:command not found

b)     建立软连接# ln -s /usr/redis/redis-server /usr/bin/redis-server

c)      # ln -s /usr/redis/redis-cli /usr/bin/redis-cli

d)     重新启动

e)      # redis-server /usr/redis/redis.conf因为所有的应用系统启动都是从usr/bin下面开始的

10. redis-cli -p 6379(端口号)  进入redis的命令窗口,再输入指令ping,提示pong代表启动成功。

11. SHUTDOWN指令关闭redis服务。

12. Redis一共有 16个库,每个角标代表一个库

13. Select 数字(0-15)可以选择第几个库

14. Dbsize用于查询当前库中kv

15. Keys *查询当前库中的所有key,相当于数据库的select *

16. FLUSHDB清空当前的库  FLUSHALL清空16个库的所有数据

17. Redis的五大数据类型:

a)      字符串String、

b)     list

c)      set

d)     hash(键值对)

e)      zset(sorted set)

18. redis-benchmark指令用于redis自己做单元测试。

19. exists key用于判断当前库里有没有这个key,如果有返回Integet类型的1,如果没有返回0.

20. Jedis这个类是java中定义的对象类。

21. Move key 2:将key直接移动到2号库

22. ttl key :ttl指令用于查询当前key的生命周期,-1:代表存在,-2代表不存在,就这两个值。

23. expire k3 10:expire指令用于设置当前key的生命周期为10秒,再次使用ttl指令,会显示当前key剩余存活时间,如果为-2就代表已经过期,如果过期后使用keys * 和 get key指令都将查不到当前的key。

24. type key:type指令用于查询当前key的类型。STRING或者其他的

25. 当set key 中key的值跟库中key的值一样,则会覆盖之前的key值。

26. lpush list 1 2 3 4 5:往list放入5个值,lrange list 0 -1:将list倒序排列开来

27. del key:删除key

---------------------------String类型相关api---------------------------------

28. append指令:append  key zhoujun,在原有key基础之上加上zhoujun

29. strlen指令:strlen key获取key中value的长度

30. incr指令:incr key把key的value值加1,相当于java中++,但前提必须是数值,decr把key的value值减一,相当于--,incrby key 3相当于把key中value每次加3,decrby 3相当于每次减3.

31. Getrange key 0 3:指令把key中value值截取0-3的字符,相当于subString用法,setrange key  0 ***:把key中vlaue值,从0位置开始,替换成***。

32. Setex

33. mset k1 v1 k2 v2 k3 v3:相当于一次可以定义多个kv,相当于多次使用set操作,当时碰到相同key的时候会覆盖之前的key,msetnx k1 v1 k2 v2,同上操作,定义多个kv,但是不同的是,如果之前有相同的key存在,则添加不会成功。Mget k1 k2一次取多个key值。

34. setex k1 10 v1:指令,定义一个k1 ,再给他一个生命周期10秒,相当于先set,再expire生命周期。Setnx指令,使用set的时候,如果会有相同key会覆盖,但使用setnx不会覆盖。

-------------------------------------list类型---------------------

35. Lpush:指令Lpush key  1 2 3 4 5:将集合key中放入五个元素,使用空格隔开,这个指令遵循的是先进后出,例如使用Lrange key 0 -1指令是将集合中所有的元素取出来,取出来后是5 4 3 21,因为他是先进后出。

36. Rpush指令类似Lpush,但是rpush遵循的是先进先出。即1 2 3 4 5

37. Lpop指令:从集合的最上面拿取元素,拿完集合中就少了一个元素,rpop与Lpop相反,从最下面拿。

38. Lindex key 0:指令通过下标拿到集合中的元素。从上往下。

39. Llen key:拿到这个集合的长度。

40. Lrem key 2 3:指令删除集合中value=3的元素,删除2个,用于排查集合中重复的元素。

41. Ltrim key 0 5:截取集合中0-5个元素,再赋值给集合。

42. Iset key 0 m:指令,将集合第0个value设置为m

43. LINSERT key BEFORE|AFTER  value1  value2:在集合的value1值得前面或者后面添加value2

-------------------------Set数据类型---------------------------------

44. Sadd key value :往set集合中添加元素,smembers:获取集合中所有元素,sismember value:判断这个集合中有没有等于这个value的元素。Scard获取集合元素的个数。

45. Srem key value:删除集合中value的元素,srandmember key 2:随机去除集合中2个元素,spop key 2:随机删除集合中的2个元素,返回删除的集合元素。

46. Smove key1 key2 value:把key1中value值赋给key2,sdiff获取两个集合中前一个集合差集,sinter取两个集合前一个的交集,sunion取两个集合前一个的并集。

-------------------------------hashSet类型--------------------------

47. Hash相当于java代码中map<String,map<String , Object>>.

48. Hset key ID 3:指令网key集合中添加id属性为3,gset KEY id,拿出集合key中id属性。

49. Hmset key id 3 namezhoujun 往key集合中添加多个属性。Hmget拿出key集合中所有属性,hdel key name删除集合中name属性。

50. Hlen key拿到集合的长度,kheys拿到集合的所有键,kvals拿到集合的所有value。

51. Hexists key name:获取集合key中是否含有name属性。

52. HINCRBY map id 1:每次往集合map中 id添加1,hincrbyfloatmap id 0.5每次往集合中id添加0.5

53. Hstnx key id 5:判断集合中是否有id的属性,如果有就无法添加,如果没有继续添加。

-------------------------------Zset类型---------------------------------

54. Zadd key 60 v1 70 v2:往key中添加元素相当于Map<String,Map<String,ojbect>>;zrangekey 0 -1 获取所有的map<String ,object>,zrange key 0 -1withscores获取所有的key value。

55. ZRANGEBYSCORE map 60 90获取map中60 – 90的value。

56.  ZCARD map获取集合大小,ZCOUNT map 60 80获取集合value60 -80的个数,其中可以写成(60 (80,(表示小于,)表示大于,zrank map v4,获取key为v4的下标,ZREVRANkmap v4获取map中v4的倒序下标,zscore map v4 获取集合中value为v4的key。

57. ZREVRANGE map 0 -1withscores获取集合所有元素,按照倒序排序。

58. ZREVRANGEBYSCORE map 90 60获取集合中90-60的value。

-----------------------配置文件---------------------------------

59. Redis的缓存策略:

60. 常见redis配置介绍:

------------------------持久化RDB----------------------------------

61. Redis的snapshot快照,意思是服务器恢复时快速将文件直接读取到内存中去。

62. Redis的快照触发机制,三种:15分钟操作1次、五分钟操作10次、1分钟操作10000次,如果禁用的话只要save “”

63. Redis的快照默认读取的配置文件是dump.rdb

64. Shutdown指令时相当于关闭redis。

65. 即刻快照的方式 save(同步的)指令或者bgsave(异步的)。

66. RDB最大的缺陷是丢失最后一份数据,而且快照备份的大小是成倍增加。

----------------------------持久化AOF------------------------------------

67. AOF以日志方式记录每一个写的操作,

68. AppendOnly.aof文件与dump.rdb文件可同时存在,但是在进行数据加载的时候会先去加载appendonly.aof文件。如果这个文件损坏的话就会启动不了redis服务。

69. 持久化开关的位置在redisconf文件中 appendonly no把no设置成yes。

70. Appendfsync的三种机制:Always(总是存储,改变一次写一次)、Everysec(每秒写一次存储)、No(不进行存储),官方建议使用everysec。

71. AppendOnly如何自动修复坏文件指令:redis-check-aof

---------------------------Redis事务管理------------------------------------

76. 正常事务执行指令:开启事务管理的指令MULTI,即刻开启事务,之后的操作没有结果需要提交事务后才能有结果。

77. 正常事务提交指令:EXEC,指令完成后会产生之前所有指令的结果。

78. 放弃事务执行指令:如果事务中突然需要放弃,使用指令DISCARD.

79. Redis的事务管理分为指令:正常执行、放弃事务、全体连坐、源头债主。

80. 源头债主:如果事务过程中执行出现错误(比如需要运行时才能知道的错误),在进行事务提交时,只是回滚出错的那条记录,其余仍然正常提交。

81. 全体连坐:如果事务中执行出现问题(比如语法错误)就不会进行事务管理,在进行事务提交时会全部回滚。

82. 事务管理就相当于批处理一些指令。

83. 所以redis的事务是属于半事务管理,不像其他数据库强事务管理。

84. Watch加锁,unwatch取消锁。

86. Watch指令类似于乐观锁。

87. 事务三阶段:开启、入队、执行

-------------------redis的发布与订阅机制----------------

88. 了解即可。

------------------------redis主从复制,读写分离------------------------------

89. Master、slaver机制:主从复制机制。Master以写为主,slave以读为主。

90. 备份机制一般分为三种类型:一主二仆、薪火相容、反客为主

91. 配置主从有两种方式:1. slaveofip port指定主从备份。2.通过在从机中redis.conf的文件中salve ip port放开。第一种方式当从机down机后需要重新使用指令,第二种方式从机down机后默认还是从机

92. 配从不配主:只需要配置从库。配置从机只需要slaveof

93. info replication指令:查看当前redis是主机还是从机。

94. 如果主从机连接失败首先检查有没有关闭主从机器的防火墙。

95. 主从读写分离,从机不能写入只能读。

96. 如果主机down的话怎么办,主机再次上线后还是主机。

97. 如果从机down怎么办:分两种情况。91已经解释过了。

98. Slaveof no one:反客为主的主要指令,当主机down后,从机使用这个指令可以将当前的从机变成主机,以后的从机就全部就跟着这个主机,那么以前的主机再次回来后就变成单独的主机,不在有任何关联关系。

99. 复制的原理:只要启动的slave成功连接到master后,会发送一个sync命令,master接到命令后后台进行存盘进程,完毕后master将传递整个数据到slave,完成一次同步。

100.            复制原理:第一次是全量,后面的都是增量。

101.            全量slave接到数据后将其存到内存。

102.            增量master将新的命令存入slave,只要是重新连接master,一次完成全量复制。


 

103.            哨兵模式:相当于自动版的反客为主,需要在主机生成一个配置文件,监控主机和从机,当主机down以后,会投票从下面的从机选择一个成为新的主机,当原来的主机再次回来的时候会变成现在的主机的从机,这是与手动版的反客为主唯一的区别。

------------------------java代码操作----------

104.            如果java代码连接不上请参照http://www.jb51.net/article/102006.htm说明。

105.            Redis主要存放的就是热点高存数据。

106.            主从复制代码相当于new两个jedis出来,一个存,一个读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值