Redis学习笔记

  1. 当把Redis作为windows服务来进行安装,文档中写的是--loglevel-verbos是错误的,应该是debug,notice或者warning之一;
  2. Redis有序排列首先是按照序号进行排序(zadd,zmemberrange);
  3. redis的连接结构其实是一个堆栈结构,比如LPUSH,LRANGE等;LRANGE 0 -1代表是从首位到尾部全部数据;我们看到最后的元素是排在上面的,LRANGE 0 -2只是较早入栈的数据会被过滤掉;
  4. Linux安装了redis发现make成功后,想要执行不能到src目录下面执行,而是要到redis-3.0.8目录下,通过索引"src/redis-server",执行成功,为什么直接在src下面不行呢?这是一个问题。
  5. Redis中的BGSave中的BG就是Backgroud之意,BGSave就是异步方式进行备份保存;Save则会阻塞进程,直到保存结束才进行其他操作;
  6. Redis.SetEntryInHash(hashId,key,value)其实本质使用的Redis中的Hashtable类型;然后向hashtable添加keyvalue;只不过ServiceStack使用了一个方法把这些批处理了;
  7. 当你想要对Redis操作的时候,需要通过Jedis.Piplelined()获取;但是需要对Redis取数据,可以直接使用Jedis的实例获得;
  8. 添加了watch之后意味着无法重复写:如果键值在事务执行的过程中被改动,则无法提交事务;但是如果没有添加watch,将会直接覆盖/创建该键值;watch的关闭是发生在最近的一次exec的时候以及unwatch调用;
  9. 有序集合,添加命令zadd sortList 100 A 101 B 102 C;实现了批量增加,可以单独增加;100代表分值,A代表成员(member),
  10. 遍历有序集合使用zrange sortList 0 -1命令;
  11. zrange的输出有两类参数:一个是输出分值范围(指定min和max值);一个是"withScores",输出内容包含分值(默认输出只是成员);
  12. 使用redis技术命令本身并不重要,关键是要明白使用的场景;
  13. 对于某个命令的帮助:help zrange
  14. 按照分值进行排序:zrange sortList 0 300; zrevrange sortList 300 0; 注意正序和倒叙命令以及参数都是不一样的;排序列表的一个应用场景是可以获取比某个值要小的集合;比如为职位进行排序,看到比自己职位小的员工信息,可以通过排序指定范围;或者比自己职位小一级的,取出返回集合的头一个即可;
  15. 搞懂一下Redis里面有序集合实现机制以及排序机制;
  16. Redis服务器也有DB的概念;并且一个服务器可以有多个DB,并可以为client端指定连接到那个DB;Jedis的select(int dbIndex)就是为Redis的客户端指定DB;这个还需要再进行考证!为什么我select(8)不好使啊;
  17. List有两种,ZipList以及LinkedList;对于单个元素都不大于64(2*6)个字节或者元素总量不大于512(2*8)个都是zipList结构,一旦超过了任意约束,就会转为LinkedList;LPUSH以及LTRIM都是针对List的操作;对于线性列表操作(有别于哈希操作)都是使用List,元素少量的Redis的处理是压缩处理,但是对于较大的数据量则采用了LinkedList结构;
  18. 看Redis实战最有价值的地方在于搞清楚每种数据结构应用的场景;
  19. hincrby是给Hashtable数据结构的field添加值,而且field的值一定是要整型才可以使用该命令,否则报错;
  20. Redis对于字符串,单个单词在命令行不需要加"",但是对于N个单词并且之间有空格就需要添加"";zadd ls 0 Jim 1 "Jim White"
  21. Redis中SetNX,Set if Not Exists,该命令是字符串操作命令;设置变量值,如果该变量已经存在,则设置失败,返回0,设置成功,代表该变量还未存在,创建并返回1;通过这个命令来作为获取锁(创建某变量)以及释放锁(删掉某变量)的机制;如果在获取锁的时候发现该锁已经存在,则说明请求的资源处于锁定状态,需要等待锁解除;
  22. Jedis的PipleLine,可以批量执行命令,最后通过sync函数一次性发送给Redis服务器;
  23. 计数锁几个关键点:1.获得锁之前要对于超时的锁项进行删除;2.创建新锁,其主键是GUID(或者其他不重复项),其分值是长整形时间形式;3.获取rank值,比较rank+1和最大说锁数量;4.获取失败则删除自己(这一步尤为重要,和自动补齐的逻辑很像,前者是有条件的删除,后者是必须删除)
  24. 获得有序集合的头元素:zrangebyscore myz 0 0;
  25. 有序集合都是分值小的排在前面;
  26. zremRangeByScore,可以通过指定min, max来删除一定分值范围内的keys,如果max值为负值意味着从后向前进行删除
  27. 很多时候,为了使用Redis中的UNION,DIFF等集合命令,会构造临时构造一些集合,数据来自于内存的变量,这些集合使用完毕之后将不再使用,于是需要使用完毕释放;可以采用两种方式:如果可预知操作时间很短,那么
  28. Redis中,有序集合判断是否有某值,通过zscore的返回值是否为空进行判断。
  29. HSet和HMSet差别在于后者可以一次指定多个key-value;M意思为multi-
  30. HGet和HGetAll之间的差别在于前者只是获取指定field的value,后者则是获取指定Hashtable里面的全部key-value,返回的形式是1)Key1 2)value1 3)key2 4)value2
  31. 有序集合(操作为:z-*),根本上理解他是一个一个单蹦元素,只不过这些元素会有一个分值属性;集合和hash的key-value是不同的;所以zrem命令中,只是传递"member"参数,也就是元素;
  32. 获得有序集合的头元素:zrangebyscore myz 0 0;集合处理只能是一个范围,如果想要获取一个元素,也是通过指定范围来让他返回集合,不过元素个数为1而已;
  33. 有序集合都是分值小的排在前面;
  34. zremRangeByScore,可以通过指定min, max来删除一定分值范围内的keys,如果max值为负值意味着从后向前进行删除;

你可能感兴趣的:(Redis学习笔记)