企业架构LNMP学习笔记48

数据结构类型操作:

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

数据类型

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

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

key:

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

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

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

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

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

bash 复制代码
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists age
(integer) 0
127.0.0.1:6379>
127.0.0.1:6379> help exists

  EXISTS key [key ...]
  summary: Determine if a key exists
  since: 1.0.0
  group: generic

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

bash 复制代码
127.0.0.1:6379> sadd xiaomingFR xiaohong  xiaoqiang  xiaogang  xiaohei  xiaobai
(integer) 5
127.0.0.1:6379> sadd xiaohongFR xiaoming  xiaolv  xiaolan  xiaobai  xiaohei
(integer) 5
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> smembers xiaomingFR
1) "xiaogang"
2) "xiaohong"
3) "xiaoqiang"
4) "xiaohei"
5) "xiaobai"
127.0.0.1:6379> smembers xiaohongFR
1) "xiaobai"
2) "xiaolv"
3) "xiaolan"
4) "xiaoming"
5) "xiaohei"
127.0.0.1:6379>
127.0.0.1:6379> sinter xiaomingFR xiaohongFR
1) "xiaohei"
2) "xiaobai"
127.0.0.1:6379> sunion xiaomingFR xiaohongFR
1) "xiaobai"
2) "xiaolv"
3) "xiaohong"
4) "xiaogang"
5) "xiaolan"
6) "xiaoming"
7) "xiaoqiang"
8) "xiaohei"

127.0.0.1:6379> sdiff xiaomingFR xiaohongFR
1) "xiaohong"
2) "xiaogang"
3) "xiaoqiang"
127.0.0.1:6379> sdiff xiaohongFR xiaomingFR
1) "xiaolv"
2) "xiaolan"
3) "xiaoming"

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

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

bash 复制代码
127.0.0.1:6379> sadd black_list 192.168.17.1
(integer) 1
127.0.0.1:6379> sismember black_list 192.168.17.1
(integer) 1
127.0.0.1:6379> sismember black_list 192.168.17.110
(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

bash 复制代码
127.0.0.1:6379> zadd hotTop 2 QQ 3 wechat 5 alipay 7 taobao 10 king 8 jd
(integer) 6

# 从小到大排序。
127.0.0.1:6379> zrange hotTop 0 5
1) "QQ"
2) "wechat"
3) "alipay"
4) "taobao"
5) "jd"
6) "king"

# 从大到小排序。
127.0.0.1:6379> zrevrange hotTop 0 5
1) "king"
2) "jd"
3) "taobao"
4) "alipay"
5) "wechat"
6) "QQ"

127.0.0.1:6379> zscore hotTop wechat
"3"

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

获取jd的score和taobao的score。

bash 复制代码
127.0.0.1:6379> zscore hotTop jd
"8"
127.0.0.1:6379> zscore hotTop taobao
"7"

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

bash 复制代码
127.0.0.1:6379> zincrby hotTop -2 jd
"6"
127.0.0.1:6379>
127.0.0.1:6379> zrange hotTop 0 5
1) "QQ"
2) "wechat"
3) "alipay"
4) "jd"
5) "taobao"
6) "king"
127.0.0.1:6379> zscore hotTop jd
"6"

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

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

bash 复制代码
127.0.0.1:6379> zrank hotTop jd
(integer) 3

hash:

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

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

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

key: value (field: value)

bash 复制代码
127.0.0.1:6379> hmset devops username devops phone 13813424930 email 853166277@qq.com job java
OK

127.0.0.1:6379> hget devops job
"java"
127.0.0.1:6379> hgetall devops
1) "username"
2) "devops"
3) "phone"
4) "13813424930"
5) "email"
6) "853166277@qq.com"
7) "job"
8) "java"


127.0.0.1:6379> hdel devops email
(integer) 1
127.0.0.1:6379> hgetall devops
1) "username"
2) "devops"
3) "phone"
4) "13813424930"
5) "job"
6) "java"


127.0.0.1:6379> hkeys devops
1) "username"
2) "phone"
3) "job"
127.0.0.1:6379> hvals devops
1) "devops"
2) "13813424930"
3) "java"


127.0.0.1:6379> hset devops email 13813424930
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379> hgetall devops
1) "username"
2) "devops"
3) "phone"
4) "13813424930"
5) "job"
6) "java"
7) "email"
8) "13813424930"

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

相关推荐
用户881586910911 小时前
AI Agent 协作系统架构设计与实践
架构
鹏北海1 小时前
Qiankun 微前端实战踩坑历程
前端·架构
货拉拉技术2 小时前
货拉拉海豚平台-大模型推理加速工程化实践
人工智能·后端·架构
JavaGuide3 小时前
字节二面:Redis 能做消息队列吗?怎么实现?
redis·后端
漫霂5 小时前
基于redis实现登录校验
redis·后端
程序员小崔日记5 小时前
一篇文章彻底搞懂 MySQL 和 Redis:原理、区别、项目用法全解析(建议收藏)
redis·mysql·项目实战
读书笔记6 小时前
CentOS 7 安装 redis-6.2.6.tar.gz 详细步骤(从源码编译到启动配置)
redis
RoyLin8 小时前
libkrun 深度解析:架构设计、模块实现与 Windows WHPX 后端
架构
焗猪扒饭18 小时前
redis stream用作消息队列极速入门
redis·后端·go