个人随笔
目录
太无聊了,随便实现一个没有考虑周全的redis分布式锁
2020-12-29 22:36:49

没有考虑进程被杀,没有考虑无线自旋的效率,没有考虑redis断掉连接等等的各种情况,只是淡村的写个代码而已:

  1. package com.suibibk.redis;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import redis.clients.jedis.Jedis;
  5. import redis.clients.jedis.JedisPool;
  6. import redis.clients.jedis.JedisPoolConfig;
  7. import redis.clients.jedis.Pipeline;
  8. public class Test {
  9. static int j = 0;
  10. static JedisPool jedisPool;
  11. private static void init() {
  12. JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
  13. jedisPoolConfig.setMaxTotal(20);
  14. jedisPoolConfig.setMaxIdle(10);
  15. jedisPoolConfig.setMinIdle(5);
  16. // timeout,这里既是连接超时又是读写超时,从Jedis 2.8开始有区分connectionTimeout和soTimeout的构造函数
  17. jedisPool = new JedisPool(jedisPoolConfig, "192.168.157.6", 6379, 3000, null);
  18. }
  19. private static void lock() {
  20. Jedis jedis = jedisPool.getResource();
  21. long lock = jedis.setnx("LOCK", "0");
  22. System.out.println(lock);
  23. if(lock==0) {
  24. //自旋
  25. while(true) {
  26. //System.out.println("自旋获取");
  27. lock = jedis.setnx("LOCK", "0");
  28. if(lock==1) {
  29. System.out.println("获取了1");
  30. break;
  31. }
  32. }
  33. }
  34. //设置过期时间
  35. jedis.expire("LOCK", 10*60);
  36. jedis.close();
  37. }
  38. private static void unlock() {
  39. Jedis jedis = jedisPool.getResource();
  40. jedis.del("LOCK");
  41. jedis.close();
  42. }
  43. public static void main(String[] args) {
  44. init();
  45. for(int i=0;i<20;i++) {
  46. new Thread(new Runnable() {
  47. public void run() {
  48. lock();
  49. try {
  50. Thread.currentThread().sleep(2000);
  51. } catch (InterruptedException e) {
  52. // TODO Auto-generated catch block
  53. e.printStackTrace();
  54. }
  55. j++;
  56. System.out.println("当前的j="+j);
  57. unlock();
  58. }
  59. }).start();
  60. }
  61. }
  62. }
 212

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2