redis-python操作
python操作安装依赖包123pip install redispip install django-redispip install redis-py-cluster
连接redis服务器123from redis import Redisred = Redis(host="192.168.220.128", port=6379, password="123456")
操作方法(偷懒贴一个连接在这里~)
http://t.zoukankan.com/davis12-p-14439690.html
写个例子:
12345//redis只支持string、int等基础类型,如果mysql数据库用到特殊类型需要额外进行转换class User(models.Model): name = models.CharField(max_length=20) age = models.SmallIntegerField() birth = models.CharField(max_length=10)
12345//在mysql中添加 ...
redis-主从配置
主从配置在从服务器中添加配置:
12replicaof host port//比如:replicaof 127.0.0.1 6379
redis-安装与配置
redis安装与配置安装12345wget http://download.redis.io/releases/redis-6.2.7.tar.gzmv redis-6.2.7.tar.gz /usr/local/srctar -xzf redis-6.2.7.tar.gzcd redis-6.2.7make && make install
默认的安装路径是在 /usr/local/bin目录下,该目录以及默认配置到环境变量,因此可以在任意目录下运行这些命令:
redis-cli:是redis提供的命令行客户端
redis-server:是redis的服务端启动脚本
redis-sentinel:是redis的哨兵启动脚本
启动redis的启动方式有很多种,例如:
默认启动
指定配置启动
开机自启
默认启动安装完成后,在任意目录输入redis-server命令即可启动Redis:
1redis-server
这种启动属于前台启动,会阻塞整个会话窗口,窗口关闭或者按下CTRL + C则Redis停止。不推荐使用。
指定配置启动如果要让Redis以后台方式启动, ...
redis-Key的层级格式
Key的 层级格式Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?
我们可以通过给key添加前缀加以区分,不过这个前缀不是随便加的,有一定的规范:
Redis的key允许有多个单词形成层级结构,多个单词之间用’:’隔开。
redis-通用命令
Redis通用命令SET模式:SET key value [NX | XX]
解释:
设置一个键值对
NX – 当且仅当key不存在时设置
XX – 当且仅当key存在使设置
返回: OK 如果正常执行,(nil)如果没有执行
样例:
SET mykey "Hello" NX
GET模式:GET key
解释:
返回key对应的值
key不存在返回(nil)
样例:
GET mykey
KEYS模式:KEYS pattern
解释:
寻找匹配pattern的所有key
返回所有匹配
?代表一个字符
*代表0至任意多字符
[]内表示允许的字符范围
[]内^后表示不允许的字符
\表示转义字符
样例:
KEYS *name*
DEL模式:DEL key [key ...]
解释:
删除指定的key
返回所删除数量
样例:
DEL key1 key2 key3
EXISTS模式:EXISTS key [key ...]
解释:
判断指定key是否存在
返回所指key有几个存在
命令中若输入重复的key,结果会重复计数
样例
EXISTS ...
redis-数据结构
Redis数据结构Redis是key-value数据库,key一般为String类型,value的类型有多种。
数据类型
例子
String
hello world
Hash
{name: “lerjiu”, age: “”}
List
[A -> B -> C -> D]
Set
{A, B, C}
SortedSet
{A: 1, B: 2, C: 3}
GEO
{A: (120.3, 30.5)}
BitMap
01001101100011010011111000100110
HyperLog
01001101100011010011111000100110
StringString类型,也就是字符串类型,是Redis中最简单的存储类型。
其value是字符串,不过根据字符串的格式不同,又可以分为3类:
string:普通字符串
int:整数类型,可以做自增.自减操作
float:浮点类型,可以做自增.自减操作
常用命令:
SET:添加或者修改已经存在的一个String类型的键值对
GET:根据key获取Stri ...
learn-vue transition
transition对于条件渲染(v-if)、条件展示(v-show)、动态组件等,如果希望切换时可以有过渡效果们就可以用transition组件。
123<transition name="fade"> <component ref="compIns" :is="curComp.comp" :data="curComp.data" @on-mounted="curComp.onMounted" @on-click="curComp.onClick"></component></transition>
css
12345678910111213141516171819202122//进入时效果//from表示初始状态 to表示结束状态(一般与组件本身样式相同) active过渡状态//all 表示对所有属性进行过渡 1s为时间 ease、ease-in等是过渡函数.fade-enter-from{ wid ...
learn-vue keep-alive
keep-alive缓存组件有时候我们不希望组件被重新渲染影响使用体验;或者出于性能考虑,避免多次重复渲染降低性能,而是希望组件可以缓存下来,维持当前的状态。这时候就需要用到keep-alive组件。
将想要缓存的组件放在keep-alive标签中即可。
参数1<keep-alive :include="" :exclude="" :max=""></keep-alive>
include与exclude均可接收逗号分隔字符串、正则、数组作为参数,分别表示缓存与不缓存。
max指定最大缓存组件数量,LRU算法。
生命周期变化开启keep-alive会引入onActivated与deActivated
执行顺序:
onMounted
onActivated
deActivated(退出后触发)
再次进入只触发onActivated
如果有挂载时间,只执行一次可以放在onMounted中,每次加载都要执行可以放在onActivated中。
learn-vue 异步组件
异步组件在大型应用中,我们可能需要将应用分割成小一些的代码块 并且减少主包的体积
这时候就可以使用异步组件
异步组件
123456789101112131415161718<template> <div>{{ret}}</div></template><script lang="ts" setup>let promise = new Promise((resolve, reject) => { setTimeout(() => { resolve('异步事件成功') }, 3000)})let ret = await promiseconsole.log(ret)</script><style scoped></style>
父组件
12345678910111213141516171819<template> <div cl ...
ts-Promise
PromisePromise的含义异步编程的一种解决方案。Promise可以看做一个容器,里面保存着未来才会结束的事件(通常是异步操作)的结果。从语法上讲,Promise是对象,下图为Promise对象结构,PromiseState代表状态,PromiseResult代表结果。后面会详细说明。
Promise对象有以下两个特点
对象的状态不受外界影响。Promise代表一个异步操作,有三个状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态。其他任何操作都无法改变这个状态。
状态一旦改变,就会永久维持,任何时候都会得到这个结果。Promise状态的改变只有两种可能:从pending到fulfilled或从pending到rejected。如果是在状态已经发生改变之后再去添加回调函数,也会立即得到这个结果。这与事件的监听不同,不会因为状态改变时没有回调函数而错过。
在实际代码中,我们一般用resolve与reject分别对应fulfilled与rejected这两种状态。
Promise也有一些缺陷。 ...