企业架构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做缓存。

相关推荐
Hello.Reader2 小时前
Redis 延迟排查与优化全攻略
数据库·redis·缓存
ai小鬼头2 小时前
AIStarter如何助力用户与创作者?Stable Diffusion一键管理教程!
后端·架构·github
掘金-我是哪吒5 小时前
分布式微服务系统架构第156集:JavaPlus技术文档平台日更-Java线程池使用指南
java·分布式·微服务·云原生·架构
国服第二切图仔5 小时前
文心开源大模型ERNIE-4.5-0.3B-Paddle私有化部署保姆级教程及技术架构探索
百度·架构·开源·文心大模型·paddle·gitcode
SelectDB6 小时前
SelectDB 在 AWS Graviton ARM 架构下相比 x86 实现 36% 性价比提升
大数据·架构·aws
weixin_437398217 小时前
转Go学习笔记(2)进阶
服务器·笔记·后端·学习·架构·golang
liulilittle8 小时前
SNIProxy 轻量级匿名CDN代理架构与实现
开发语言·网络·c++·网关·架构·cdn·通信
喷火龙8号8 小时前
深入理解MSC架构:现代前后端分离项目的最佳实践
后端·架构
Codebee8 小时前
“自举开发“范式:OneCode如何用低代码重构自身工具链
java·人工智能·架构
掘金-我是哪吒9 小时前
分布式微服务系统架构第158集:JavaPlus技术文档平台日更-JVM基础知识
jvm·分布式·微服务·架构·系统架构