• 企业架构LNMP学习笔记48


    数据结构类型操作:

    数据结构:存储数据的方式

    数据类型

    算法:取数据的方式,代码就把数据进行组合,计算、存储、取出。

    排序算法:冒泡排序、堆排序  二分。

    key:

    key的命名规则不同于一般语言,键盘上除了空格、\n换行外其他大部分字符都可以使用。

    像“my key”和“mykey\n”这样包含空格和换行的key是不允许的。变量名称:

    我们在使用的时候可以自己定义一个key的格式:

    key的命名不要太长,占用内存,查询慢。

    key不要太短。像u:1000:pwd:123456 就不如:user:1000:password:123456 可读性好。

    1. 127.0.0.1:6379> exists name
    2. (integer) 1
    3. 127.0.0.1:6379> exists age
    4. (integer) 0
    5. 127.0.0.1:6379>
    6. 127.0.0.1:6379> help exists
    7. EXISTS key [key ...]
    8. summary: Determine if a key exists
    9. since: 1.0.0
    10. group: generic
    11. 127.0.0.1:6379> exists name age

    里面默认有16个数据库,从0到15。

    move name 16

    select 16

    keys *

    dbsize

    flushdb

    flushall

    这两个命令在生产环境中尽量少用。

    String数据类型:

    String是Redis最基本的类型。

    Redis的String可以包含任何数据。包括jpg图片,base64或者序列化对象。

    单个value的最大上限是512MB。

    如果只用String类型,Redis就可以看做是持久化性的memcached。

    序列化字符串。

    图片也可以字符串。

    substr name 5 10

    append name centos

    strlen name

    set:

    Redis的set是String类型的无序集合,集合里面不允许有重复的元素。

    set元素最大可以包含2的32次方-1个元素。

    关于set元素类型除了基本的添加删除操作,其他常用的操作还包括集合的取并集union、交集intersection、差集difference、通过这些操作可以很容易地实现sns中的好友推荐功能。

    而且是内存操作,速度非常快。

    tips:mysql连表文氏图:

    需求:实现朋友圈的存储和共同好友的计算。

    设计:

    key value

    xiaomingFR xiaohong xiaoqiang xiaogang xiaohei xiaobai

    xiaohongFR xiaoming xiaolv xiaolan xiaobai xiaohei

    1. 127.0.0.1:6379> sadd xiaomingFR xiaohong xiaoqiang xiaogang xiaohei xiaobai
    2. (integer) 5
    3. 127.0.0.1:6379> sadd xiaohongFR xiaoming xiaolv xiaolan xiaobai xiaohei
    4. (integer) 5
    5. 127.0.0.1:6379>
    6. 127.0.0.1:6379>
    7. 127.0.0.1:6379> smembers xiaomingFR
    8. 1) "xiaogang"
    9. 2) "xiaohong"
    10. 3) "xiaoqiang"
    11. 4) "xiaohei"
    12. 5) "xiaobai"
    13. 127.0.0.1:6379> smembers xiaohongFR
    14. 1) "xiaobai"
    15. 2) "xiaolv"
    16. 3) "xiaolan"
    17. 4) "xiaoming"
    18. 5) "xiaohei"
    19. 127.0.0.1:6379>
    20. 127.0.0.1:6379> sinter xiaomingFR xiaohongFR
    21. 1) "xiaohei"
    22. 2) "xiaobai"
    23. 127.0.0.1:6379> sunion xiaomingFR xiaohongFR
    24. 1) "xiaobai"
    25. 2) "xiaolv"
    26. 3) "xiaohong"
    27. 4) "xiaogang"
    28. 5) "xiaolan"
    29. 6) "xiaoming"
    30. 7) "xiaoqiang"
    31. 8) "xiaohei"
    32. 127.0.0.1:6379> sdiff xiaomingFR xiaohongFR
    33. 1) "xiaohong"
    34. 2) "xiaogang"
    35. 3) "xiaoqiang"
    36. 127.0.0.1:6379> sdiff xiaohongFR xiaomingFR
    37. 1) "xiaolv"
    38. 2) "xiaolan"
    39. 3) "xiaoming"

    主要是看业务是怎么操作的。

    使用set建立黑名单(白名单)

    1. 127.0.0.1:6379> sadd black_list 192.168.17.1
    2. (integer) 1
    3. 127.0.0.1:6379> sismember black_list 192.168.17.1
    4. (integer) 1
    5. 127.0.0.1:6379> sismember black_list 192.168.17.110
    6. (integer) 0

    zset:

    和set一样sorted set也是string类型元素的集合,有序集合,元素不允许重复。

    不同的是每个元素都会关联一个权。权重,score。

    通过权值可以有序地获取集合中的元素,可以通过score值进行排序。

    这个score就是权值。

    需求:实现手机App市场的软件排名。排名榜单。

    设计:

    Key : hotTop

    id Score(权重) name

    1   2   QQ

    2   3   wechat

    3   5   alipay

    4   7   taobao

    5 10   king

    6   8   jd

    1. 127.0.0.1:6379> zadd hotTop 2 QQ 3 wechat 5 alipay 7 taobao 10 king 8 jd
    2. (integer) 6
    3. # 从小到大排序。
    4. 127.0.0.1:6379> zrange hotTop 0 5
    5. 1) "QQ"
    6. 2) "wechat"
    7. 3) "alipay"
    8. 4) "taobao"
    9. 5) "jd"
    10. 6) "king"
    11. # 从大到小排序。
    12. 127.0.0.1:6379> zrevrange hotTop 0 5
    13. 1) "king"
    14. 2) "jd"
    15. 3) "taobao"
    16. 4) "alipay"
    17. 5) "wechat"
    18. 6) "QQ"
    19. 127.0.0.1:6379> zscore hotTop wechat
    20. "3"

    zrange命令可以看到jd排第五名,淘宝排第四名。

    获取jd的score和taobao的score。

    1. 127.0.0.1:6379> zscore hotTop jd
    2. "8"
    3. 127.0.0.1:6379> zscore hotTop taobao
    4. "7"

    把jd的权值调小到6,才能排到taobao前面。那jd的权值减小2。

    1. 127.0.0.1:6379> zincrby hotTop -2 jd
    2. "6"
    3. 127.0.0.1:6379>
    4. 127.0.0.1:6379> zrange hotTop 0 5
    5. 1) "QQ"
    6. 2) "wechat"
    7. 3) "alipay"
    8. 4) "jd"
    9. 5) "taobao"
    10. 6) "king"
    11. 127.0.0.1:6379> zscore hotTop jd
    12. "6"

    使用zincrby 增加一个负值,就能将score权值进行了调整。

    zrank是排名下标。从小到大排名。

    1. 127.0.0.1:6379> zrank hotTop jd
    2. (integer) 3

    hash:

    如果采用hash结构,redis的内存使用率更高。效率更高一些。

    使用redis做缓存,可以使用hash结构,压缩效率和使用效率更高,比String。

    hash存储数据和关系型数据库mysql,存储的一条数据的结构极为相似。

    key: value  (field: value)

    1. 127.0.0.1:6379> hmset devops username devops phone 13813424930 email 853166277@qq.com job java
    2. OK
    3. 127.0.0.1:6379> hget devops job
    4. "java"
    5. 127.0.0.1:6379> hgetall devops
    6. 1) "username"
    7. 2) "devops"
    8. 3) "phone"
    9. 4) "13813424930"
    10. 5) "email"
    11. 6) "853166277@qq.com"
    12. 7) "job"
    13. 8) "java"
    14. 127.0.0.1:6379> hdel devops email
    15. (integer) 1
    16. 127.0.0.1:6379> hgetall devops
    17. 1) "username"
    18. 2) "devops"
    19. 3) "phone"
    20. 4) "13813424930"
    21. 5) "job"
    22. 6) "java"
    23. 127.0.0.1:6379> hkeys devops
    24. 1) "username"
    25. 2) "phone"
    26. 3) "job"
    27. 127.0.0.1:6379> hvals devops
    28. 1) "devops"
    29. 2) "13813424930"
    30. 3) "java"
    31. 127.0.0.1:6379> hset devops email 13813424930
    32. (integer) 1
    33. 127.0.0.1:6379>
    34. 127.0.0.1:6379> hgetall devops
    35. 1) "username"
    36. 2) "devops"
    37. 3) "phone"
    38. 4) "13813424930"
    39. 5) "job"
    40. 6) "java"
    41. 7) "email"
    42. 8) "13813424930"

    使用Redis做缓存,要学会使用hash做缓存。

  • 相关阅读:
    一本通2070;数字对调
    SpringMVC
    Python实现MYSQL蜜罐
    智慧水务系统建设组网方案
    SSL证书:网络通信安全的基石
    去中心化衍生品协议内卷,ZKX 能否通过差异化道路突出重围?
    Day27——39. 组合总和 40.组合总和II 131.分割回文串
    3、Flowable任务分配和流程变量
    HALCON联合C#检测表面缺陷——ROI交互(四)(和图片同步缩放裁剪等功能)
    ioctl cmd 不能等于 2 的小问题
  • 原文地址:https://blog.csdn.net/chang_chunhua/article/details/132909697