内容列表
redis php 对象
/*1.Connection*/$redis = new Redis();$redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超过1秒放弃链接$redis->open('127.0.0.1',6379,1);//短链接(同上)$redis->pconnect('127.0.0.1',6379,1);//长链接,本地host,端口为6379,超过1秒放弃链接$redis->popen('127.0.0.1',6379,1);//长链接(同上)$redis->auth('password');//登录验证密码,返回【true | false】$redis->select(0);//选择redis库,0~15 共16个库$redis->close();//释放资源$redis->ping(); //检查是否还再链接,[+pong]$redis->ttl('key');//查看失效时间[-1 | timestamps]$redis->persist('key');//移除失效时间[ 1 | 0]$redis->sort('key',[$array]);//返回或保存给定列表、集合、有序集合key中经过排序的元素,$array为参数limit等!【配合$array很强大】 [array|false] /*2.共性的运算归类*/$redis->expire('key',10);//设置失效时间[true | false]$redis->move('key',15);//把当前库中的key移动到15库中[0|1]//string$redis->strlen('key');//获取当前key的长度$redis->append('key','string');//把string追加到key现有的value中[追加后的个数]$redis->incr('key');//自增1,如不存在key,赋值为1(只对整数有效,存储以10进制64位,redis中为str)[new_num | false]$redis->incrby('key',$num);//自增$num,不存在为赋值,值需为整数[new_num | false]$redis->decr('key');//自减1,[new_num | false]$redis->decrby('key',$num);//自减$num,[ new_num | false]$redis->setex('key',10,'value');//key=value,有效期为10秒[true]//list$redis->llen('key');//返回列表key的长度,不存在key返回0, [ len | 0]//set$redis->scard('key');//返回集合key的基数(集合中元素的数量)。[num | 0]$redis->sMove('key1', 'key2', 'member');//移动,将member元素从key1集合移动到key2集合。[1 | 0]//Zset$redis->zcard('key');//返回集合key的基数(集合中元素的数量)。[num | 0]$redis->zcount('key',0,-1);//返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员。[num | 0]//hash$redis->hexists('key','field');//查看hash中是否存在field,[1 | 0]$redis->hincrby('key','field',$int_num);//为哈希表key中的域field的值加上量(+|-)num,[new_num | false]$redis->hlen('key');//返回哈希表key中域的数量。[ num | 0] /*3.Server*/$redis->dbSize();//返回当前库中的key的个数$redis->flushAll();//清空整个redis[总true]$redis->flushDB();//清空当前redis库[总true]$redis->save();//同步??把数据存储到磁盘-dump.rdb[true]$redis->bgsave();//异步??把数据存储到磁盘-dump.rdb[true]$redis->info();//查询当前redis的状态 [verson:2.4.5....]$redis->lastSave();//上次存储时间key的时间[timestamp]$redis->watch('key','keyn');//监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断 [true]$redis->unwatch('key','keyn');//取消监视一个(或多个) key [true]$redis->multi(Redis::MULTI);//开启事务,事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令在一个原子时间内执行。$redis->multi(Redis::PIPELINE);//开启管道,事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令在一个原子时间内执行。$redis->exec();//执行所有事务块内的命令,;【事务块内所有命令的返回值,按命令执行的先后顺序排列,当操作被打断时,返回空值 false】 /*4.String,键值对,创建更新同操作*/$redis->setOption(Redis::OPT_PREFIX,'hf_');//设置表前缀为hf_$redis->set('key',1);//设置key=aa value=1 [true]$redis->mset($arr);//设置一个或多个键值[true]$redis->setnx('key','value');//key=value,key存在返回false[|true]$redis->get('key');//获取key [value]$redis->mget($arr);//(string|arr),返回所查询键的值$redis->del($key_arr);//(string|arr)删除key,支持数组批量删除【返回删除个数】$redis->delete($key_str,$key2,$key3);//删除keys,[del_num]$redis->getset('old_key','new_value');//先获得key的值,然后重新赋值,[old_value | false] /*5.List栈的结构,注意表头表尾,创建更新分开操作*/$redis->lpush('key','value');//增,只能将一个值value插入到列表key的表头,不存在就创建 [列表的长度 |false]$redis->rpush('key','value');//增,只能将一个值value插入到列表key的表尾 [列表的长度 |false]$redis->lInsert('key', Redis::AFTER, 'value', 'new_value');//增,将值value插入到列表key当中,位于值value之前或之后。[new_len | false]$redis->lpushx('key','value');//增,只能将一个值value插入到列表key的表头,不存在不创建 [列表的长度 |false]$redis->rpushx('key','value');//增,只能将一个值value插入到列表key的表尾,不存在不创建 [列表的长度 |false]$redis->lpop('key');//删,移除并返回列表key的头元素,[被删元素 | false]$redis->rpop('key');//删,移除并返回列表key的尾元素,[被删元素 | false]$redis->lrem('key','value',0);//删,根据参数count的值,移除列表中与参数value相等的元素count=(0|-n表头向尾|+n表尾向头移除n个value) [被移除的数量 | 0]$redis->ltrim('key',start,end);//删,列表修剪,保留(start,end)之间的值 [true|false]$redis->lset('key',index,'new_v');//改,从表头数,将列表key下标为第index的元素的值为new_v, [true | false]$redis->lindex('key',index);//查,返回列表key中,下标为index的元素[value|false]$redis->lrange('key',0,-1);//查,(start,stop|0,-1)返回列表key中指定区间内的元素,区间以偏移量start和stop指定。[array|false]/*6.Set,没有重复的member,创建更新同操作*/$redis->sadd('key','value1','value2','valuen');//增,改,将一个或多个member元素加入到集合key当中,已经存在于集合的member元素将被忽略。[insert_num]$redis->srem('key','value1','value2','valuen');//删,移除集合key中的一个或多个member元素,不存在的member元素会被忽略 [del_num | false]$redis->smembers('key');//查,返回集合key中的所有成员 [array | '']$redis->sismember('key','member');//判断member元素是否是集合key的成员 [1 | 0]$redis->spop('key');//删,移除并返回集合中的一个随机元素 [member | false]$redis->srandmember('key');//查,返回集合中的一个随机元素 [member | false]$redis->sinter('key1','key2','keyn');//查,返回所有给定集合的交集 [array | false]$redis->sunion('key1','key2','keyn');//查,返回所有给定集合的并集 [array | false]$redis->sdiff('key1','key2','keyn');//查,返回所有给定集合的差集 [array | false] /*7.Zset,没有重复的member,有排序顺序,创建更新同操作*/$redis->zAdd('key',$score1,$member1,$scoreN,$memberN);//增,改,将一个或多个member元素及其score值加入到有序集key当中。[num | 0]$redis->zrem('key','member1','membern');//删,移除有序集key中的一个或多个成员,不存在的成员将被忽略。[del_num | 0]$redis->zscore('key','member');//查,通过值反拿权 [num | null]$redis->zrange('key',$start,$stop);//查,通过(score从小到大)【排序名次范围】拿member值,返回有序集key中,【指定区间内】的成员 [array | null]$redis->zrevrange('key',$start,$stop);//查,通过(score从大到小)【排序名次范围】拿member值,返回有序集key中,【指定区间内】的成员 [array | null]$redis->zrangebyscore('key',$min,$max[,$config]);//查,通过scroe权范围拿member值,返回有序集key中,指定区间内的(从小到大排)成员[array | null]$redis->zrevrangebyscore('key',$max,$min[,$config]);//查,通过scroe权范围拿member值,返回有序集key中,指定区间内的(从大到小排)成员[array | null]$redis->zrank('key','member');//查,通过member值查(score从小到大)排名结果中的【member排序名次】[order | null]$redis->zrevrank('key','member');//查,通过member值查(score从大到小)排名结果中的【member排序名次】[order | null]$redis->ZINTERSTORE();//交集$redis->ZUNIONSTORE();//差集/*8.Hash,表结构,创建更新同操作*/$redis->hset('key','field','value');//增,改,将哈希表key中的域field的值设为value,不存在创建,存在就覆盖【1 | 0】$redis->hget('key','field');//查,取值【value|false】$arr = array('one'=>1,2,3);$arr2 = array('one',0,1);$redis->hmset('key',$arr);//增,改,设置多值$arr为(索引|关联)数组,$arr[key]=field, [ true ]$redis->hmget('key',$arr2);//查,获取指定下标的field,[$arr | false]$redis->hgetall('key');//查,返回哈希表key中的所有域和值。[当key不存在时,返回一个空表]$redis->hkeys('key');//查,返回哈希表key中的所有域。[当key不存在时,返回一个空表]$redis->hvals('key');//查,返回哈希表key中的所有值。[当key不存在时,返回一个空表]$redis->hdel('key',$arr2);//删,删除指定下标的field,不存在的域将被忽略,[num | false]
2022-08-29
css-flex
类别属性名可选取值作用说明关键注意事项Flex 容器属性displayflex、inline-flex块级弹性容器(独占一行)、行内级弹性容器(同行排列)开启 Flex 布局核心,子元素自动成为 Flex 项目;inline-flex 容器宽高由内容决定flex-directionrow(默认)、row-reverse、column、column-reverse控制主轴方向:水平左→右、水平右→左、垂直上→下、垂直下→上主轴方向决定 justify-content/align-items 的作用维度(水平 / 垂直)flex-wrapnowrap(默认)、wrap、wrap-reverse主轴空间不足时:不换行(压缩项目)、换行(新行在下)、反向换行(新行在上)nowrap 时项目受 min-width/min-height 限制;wrap 后生成多弹性行,需配合 align-content 控制行间距flex-flow[flex-direction] [flex-wrap](默认 row nowrap)复合属性:合并设置主轴方向 + 换行规则示例:flex-flow: column wrap(垂直方向 + 换行),简化代码书写justify-contentflex-start(默认)、flex-end、center、space-between、space-around、space-evenly、start、end、left、right主轴对齐方式:贴起点、贴终点、居中、首尾贴边均匀分布、两侧留白均匀分布、完全均匀分布、适配书写模式对齐主轴为 row 时控制水平对齐,column 时控制垂直对齐;space-evenly 兼容现代浏览器,left/right 仅水平主轴生效align-itemsstretch(默认)、flex-start、flex-end、center、baseline、first baseline、last baseline交叉轴单行对齐:拉伸填满、贴起点、贴终点、居中、基线对齐、首 / 尾基线对齐项目未设 height/min-height 时 stretch 生效;baseline 按文字第一行基线对齐,无视项目高度align-contentstretch(默认)、flex-start、flex-end、center、space-between、space-around、space-evenly、start、end交叉轴多行对齐(仅换行时生效):拉伸填满、贴起点、贴终点、居中、均匀分布等单行项目时无效;控制弹性行之间的间距,与 align-items(控制项目对齐)区分开gap[length](如 10px)、[row-gap] [column-gap](如 10px 20px)项目间距:统一设置水平 + 垂直间距,或分别设置行 / 列间距仅作用于项目之间,不影响项目与容器间距;替代 margin 更简洁,避免外层留白问题row-gap/column-gap[length](如 20px/10px)单独设置项目水平间距(列)、垂直间距(行)优先级低于 gap 复合属性;row-gap 控制行与行间距,column-gap 控制列与列间距align-tracks/justify-tracksstretch、flex-start、flex-end、center 等控制网格轨道对齐(Flex-Grid 混合场景)Flex 布局中极少使用,主要用于兼容 Grid 布局的轨道控制需求Flex 项目属性flex-grownumber(默认 0,非负)主轴剩余空间分配比例:数值越大,占比越多默认为不扩展;多个项目按比例分配(如 1:2:3 则占比 1/6:2/6:3/6);取值不能为负数flex-shrinknumber(默认 1,非负)主轴空间不足时收缩比例:数值越大,收缩越多默认为允许收缩;0 时项目不收缩(优先保证自身尺寸);取值不能为负数,需结合 flex-basis 生效flex-basisauto(默认)、[length](如 150px)、[percentage](如 30%)、content项目主轴初始尺寸:默认取自身宽高、固定尺寸、容器占比、内容自适应优先级:flex-basis > 项目 width/height;content 兼容性稍差(IE 不支持)flexnone(0 0 auto)、auto(1 1 auto)、[flex-grow]([grow] 1 0)、[flex-grow] [flex-shrink]([grow] [shrink] 0)、[flex-grow] [flex-shrink] [flex-basis]复合属性:合并设置扩展、收缩、基准尺寸推荐完整写法(如 flex: 1 0 200px);flex: 1 为最常用自适应写法(平均分配空间);flex: none 用于固定尺寸项目align-selfauto(默认)、stretch、flex-start、flex-end、center、baseline、first baseline、last baseline单个项目交叉轴对齐:覆盖父容器 align-items 属性仅作用于当前项目;示例:某项目需 “垂直居下”,其他项目 “居中” 时使用orderinteger(默认 0,可正负)项目视觉排序:数值越小,排列越靠前不修改 DOM 结构,仅视觉调整;负数可排在默认项目之前(如 order: -1);注意无障碍访问(屏幕阅读器按 DOM 顺序读取)marginauto、常规取值(如 10px)自动填充剩余空间(auto),或设置普通外边距margin: 0 auto 实现单个项目主轴居中;margin: auto 0 实现单个项目交叉轴居中;常规取值与普通 CSS margin 一致,影响项目间距
2022-08-08
css常用样式 换行
强制不换行: p { white-space:nowrap; } 自动换行: p { word-wrap:break-word; } 强制英文单词断行: p { word-break:break-all; } 保留换行符,合并空白符序列: p { white-space: pre-line; } //超出的文本隐藏 overflow:hidden; //溢出用省略号显示 text-overflow:ellipsis; //溢出不换行 (只显示一行) 影响换行 white-space:nowrap; 两行显示 overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; word-break: break-all; 强制不换行: p { white-space:nowrap; } 自动换行: p { word-wrap:break-word; } 强制英文单词断行: p { word-break:break-all; } 注意:设置强制将英文单词断行,需要将行内元素设置为块级元素。 超出显示省略号: p{text-overflow:ellipsis;overflow:hidden;} white-space: normal|pre|nowrap|pre-wrap|pre-line|inherit; •white-space: 属性设置如何处理元素内的空白 •normal: 默认。空白会被浏览器忽略。 •pre: 空白会被浏览器保留。其行为方式类似 HTML 中的 pre 标签。 •nowrap: 文本不会换行,文本会在在同一行上继续,直到遇到 br 标签为止。 •pre-wrap: 保留空白符序列,但是正常地进行换行。 •pre-line: 合并空白符序列,但是保留换行符。 •inherit: 规定应该从父元素继承 white-space 属性的值。 word-wrap: normal|break-word; •word-wrap: 属性用来标明是否允许浏览器在单词内进行断句,这是为了防止当一个字符串太长而找不到它的自然断句点时产生溢出现象。 •normal: 只在允许的断字点换行(浏览器保持默认处理) •break-word: 在长单词或URL地址内部进行换行 word-break: normal|break-all|keep-all; •word-break 属性用来标明怎么样进行单词内的断句。 •normal:使用浏览器默认的换行规则。 •break-all:允许再单词内换行 •keep-all:只能在半角空格或连字符处换行 文本下划线位置 text-decoration-line 值 描述 none 默认。定义标准的文本。 underline 定义文本下的一条线。 overline 定义文本上的一条线。 line-through 定义穿过文本下的一条线。 blink 定义闪烁的文本。 inherit 规定应该从父元素继承 text-decoration 属性的值。 文本下划线样式 text-decoration-style 值 描述 solid 默认值。线条显示为单行。 double 线条显示为双线。 dotted 线条显示为点线。 dashed 线条显示为虚线。 wavy 线条显示为波浪线。 initial 将此属性设置为其默认值。 inherit 从其父元素继承此属性。
2022-08-08
定位和地址相互转换(腾讯地图)
if (!function_exists('get_adcode_r')) { function get_adcode_r($lat,$lng ,$key){ $ch = curl_init(); try { curl_setopt($ch, CURLOPT_URL, "https://apis.map.qq.com/ws/geocoder/v1/?location=$lat,$lng&key=$key"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); $contents = curl_exec($ch); curl_close($ch); $contents = json_decode($contents,true); $rt = ['adcode'=>'','district'=>'','city'=>'','province'=>'','lng'=>'','lat'=>'' ]; if(isset($contents['result']) && isset($contents['result']['ad_info'])&& isset($contents['result']['ad_info']['adcode'])) { $rt['adcode'] = $contents['result']['ad_info']['adcode']; } if(isset($contents['result']) && isset($contents['result']['address_component']) && $contents['result']['address_component']) { $rt['district'] = $contents['result']['address_component']['district']; $rt['city'] = $contents['result']['address_component']['city']; $rt['province'] = $contents['result']['address_component']['province']; } if(isset($contents['result']) && isset($contents['result']['location'])&& $contents['result']['location'] ) { $rt['lng'] = $contents['result']['location'] ['lng']; $rt['lat'] = $contents['result']['location'] ['lat']; } } catch (Exception $e) { } return $rt; } } if (!function_exists('get_adcode')) { function get_adcode($addr ,$key){ $ch = curl_init(); try { curl_setopt($ch, CURLOPT_URL, "https://apis.map.qq.com/ws/geocoder/v1/?address=$addr&key=$key"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); $contents = curl_exec($ch); curl_close($ch); $contents = json_decode($contents,true); $rt = ['adcode'=>'','district'=>'','city'=>'','province'=>'','lng'=>'','lat'=>'' ]; if(isset($contents['result']) && isset($contents['result']['ad_info'])&& isset($contents['result']['ad_info']['adcode'])) { $rt['adcode'] = $contents['result']['ad_info']['adcode']; } if(isset($contents['result']) && isset($contents['result']['address_components']) && $contents['result']['address_components']) { $rt['district'] = $contents['result']['address_components']['district']; $rt['city'] = $contents['result']['address_components']['city']; $rt['province'] = $contents['result']['address_components']['province']; } if(isset($contents['result']) && isset($contents['result']['location'])&& $contents['result']['location'] ) { $rt['lng'] = $contents['result']['location'] ['lng']; $rt['lat'] = $contents['result']['location'] ['lat']; } } catch (Exception $e) { } return $rt; } }
2022-08-06