redis基本类型和使用

redis存储数据的基本类型有:string(字符串类型)、hash(散列类型)、list(列表类型)、set(集合类型)、zset(有序集合类型)。

依次做一些练习。redis命令不区分大小写。

key相关操作

127.0.0.1:6379> set key hello   ## 设置
OK
127.0.0.1:6379> set key1 world
OK
127.0.0.1:6379> keys ke*   ## keys查询键名
1) "key1"
2) "key"
127.0.0.1:6379> del key1   ## 删除键值对
(integer) 1
127.0.0.1:6379> exists key  ##查询键名是否存在
(integer) 1    ##存在返回1
127.0.0.1:6379> exists key1
(integer) 0  ##不存在返回0
127.0.0.1:6379> type key  ##查询键值的类型 
string

字符串类型

127.0.0.1:6379> exists num  
(integer) 0
127.0.0.1:6379> incr num  ##incr一个不存在的值,先创建新值,赋值为0,再自增1.院子操作。 对应的是decr
(integer) 1
127.0.0.1:6379> set key hello
OK
127.0.0.1:6379> incr key  ##无法对string自增
(error) ERR value is not an integer or out of range
127.0.0.1:6379> incrby num 3  ##increby增加指定的数值,对应的是decrby
(integer) 4
127.0.0.1:6379> incrbyfloat num 0.7  ##增加浮点数
"4.7"
127.0.0.1:6379> append key " world!"   ##append追加字符
(integer) 12
127.0.0.1:6379> get key
"hello world!"
127.0.0.1:6379> strlen key   ##strlen字符串长度
(integer) 12
127.0.0.1:6379> mget key num  ## mget批量获取键值
1) "hello world!"
2) "4.7"
127.0.0.1:6379> mset key hi num 5.5   ##mset批量设置
OK
127.0.0.1:6379> mget key num
1) "hi"
2) "5.5"
127.0.0.1:6379> set foo bar  
OK
127.0.0.1:6379> getbit foo 1  ##getbit获取某一位二进制数值
(integer) 1
127.0.0.1:6379> setbit foo 22 0   ##设置修改位值
(integer) 1
127.0.0.1:6379> get foo  ##修改成功
"bap"
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> set foo1 aar
OK
127.0.0.1:6379> bitop or result foo foo1 ##bitop位操作
(integer) 3
127.0.0.1:6379> get result
"car"

GETBIT key offset
SETBIT key offset value
BITCOUNT key [start] [end] 获取键值中值为1的二进制位个数,start和end表示字节位置
BITOP operation destkey key [key...] 对多个键值进行位运算,并将结果存储在destkey对应的键值中。支持的操作:AND、 OR、 XOR、 NOT。
GETSET key newValue 原子操作,设置新值,返回原来的值。如果原值不存在,返回nil。
SETEX key seconds value 设置键值对的失效时间是seconds秒。
SETNX key value put if absent, or do nothing。
SETRANGE key offset value 从index等于offset位置起,替换length(value)个字符,替换为value。如果offset超出范围,则中间补充0x00。
GETRANGE key start end 获取指定返回的字符串,闭区间。end超过长度,则取到字符串末尾。
MGET key [key ... ]
MSET key value [key value ... ]
MSETNX key value [key value ... ] 原子操作。如果在这一批Keys中有任意一个Key已经存在了,那么该操作将全部回滚,即所有的修改都不会生效。1表示全部设置成功;0表示都没有设置。

127.0.0.1:6379> getset foo hi  ##设置新值,返回旧值nil
(nil)
127.0.0.1:6379> get foo
"hi"
127.0.0.1:6379> setex foo 2 hello  ##设置键值对,2秒失效
OK
127.0.0.1:6379> get foo    ##没失效时,返回值
"hello"
127.0.0.1:6379> get foo   ##失效之后,返回nil
(nil)
127.0.0.1:6379> set foo hello
OK
127.0.0.1:6379> setrange foo 1 appy  ##替换index=1之后的字符串
(integer) 5
127.0.0.1:6379> get foo
"happy"
127.0.0.1:6379> setrange foo 1 ee
(integer) 5   ##返回修改后的长度
127.0.0.1:6379> get foo   ##替换两个字符
"heepy"
127.0.0.1:6379> setrange foo 8  day
(integer) 11     
127.0.0.1:6379> get foo
"heepy\x00\x00\x00day"
127.0.0.1:6379> get bar
(nil)
127.0.0.1:6379> setrange bar 2 ee ##bar的值为nil,补充两个0x00
(integer) 4
127.0.0.1:6379> get bar
"\x00\x00ee"
127.0.0.1:6379> set key1 hello
OK
127.0.0.1:6379> msetnx key1 hi key2 hi  ##key2不存在,不修改
(integer) 0
127.0.0.1:6379> mget key1 key2  ## key2依然为nil
1) "hello"
2) (nil)

hash

HSET key field value
HGET key field
HMSET key field value [field value ... ]
HMGET key field [field ...]
HGETALL key
HEXISTS key field
HSETNX key field value 字段不存在时赋值。 与HSET类型,区别在于,如果字段存在,HSETNX不执行任何操作。
HINCRBY key filed increment 如果key、field不存在,自动创建,键值为0,再增值。
HDEL key field [field...] 这是删除的是key:field,不能直接删除key。如果要删除key,使用DEL命令。
HEYS key 只获取字段名
HVALS key 只获取字段值
HLEN key 获得字段数量

127.0.0.1:6379> HMSET g1class1 xiaoming 001 xiaohong 002 tom 003 hanmeimei 004
OK
127.0.0.1:6379> HGETALL g1class1 
1) "xiaoming"
2) "001"
3) "xiaohong"
4) "002"
5) "tom"
6) "003"
7) "hanmeimei"
8) "004"
127.0.0.1:6379> HKEYS g1class1
1) "xiaoming"
2) "xiaohong"
3) "tom"
4) "hanmeimei"
127.0.0.1:6379> HLEN g1class1
(integer) 4
127.0.0.1:6379> HGET g1class1 xiaohong
"002"
127.0.0.1:6379> HSET g1class1 lilei 005  ##het新值时,返回1
(integer) 1
127.0.0.1:6379> hset g1class1 xiaohong 007  ## hset更新值时,返回0
(integer) 0
127.0.0.1:6379> hsetnx g1class1 tom 008 ##已存在的值,不操作
(integer) 0
127.0.0.1:6379> hget g1class1 tom  ##已存在的值,更新不生效,还是003
"003"
127.0.0.1:6379> hdel g1class1   ##不能直接删除key
(error) ERR wrong number of arguments for 'hdel' command
127.0.0.1:6379> DEL g1class1  ##使用DEL删除key
(integer) 1
127.0.0.1:6379> hgetall g1class1  ##查询为空
(empty list or set)

用途

  • 用来存储分级数据。外部key作为prefix,是第一级key,hash中的key作为第二级key使用。
  • 存储含有多个属性的对象,如一篇博客的各种属性:标题,标签,分类等。修改某个属性,不用操作整个博客内容。

list

redis列表类型内部是使用双向列表实现的,所以可以向/从两端添加/删除元素。
LPUSH key value [value ...] 从左侧添加元素,如果key不存在,初始化一个空列表,再添加。返回插入后,链表的个数。
LPUSHX key value 仅当指定的Key存在时,才在列表的左边插入Value,否则将不会有任何操作发生。返回插入后,链表的个数。
RPUSH key value [value ...] 从右侧添加元素
RPUSHX key value 仅当指定的Key存在时,才在列表的右边插入Value,否则将不会有任何操作发生。返回插入后,链表的个数。
LPOP key 从两端弹出元素
RPOP key
LLEN key 获取列表中元素个数
LRANGE key start end 获取列表片段,左边在前,右边在后。起始索引为0,最右边元素索引可以为-1,右边第二个索引可以为-2,以此类推。。。索引从左到右,如果start比end靠右,则返回空列表。end值可以大于长度范围。
LREM key count value 从左边(count > 0)开始,删除前count个值为value的元素;从右边(count < 0)开始,删除前|count|个值为value的元素 ; 删除所有值为value的元素(count = 0)。返回实际删除元素的个数。
LINDEX key index 获取指定索引的元素值
LSET key index value 设置指定索引的元素值
LTRIM key start end 删除指定索引范围之外的所有元素。start和end的规则与lrange的相同。
LINSERT key BEFORE|AFTER pivot value 从左到右查找pivot,将value插在其前面(BEFORE)或者后面(AFTER)。 返回插入后,元素总个数。
RPOPLPUSH source destination 删除source最右边的元素,插入到destination最左边。返回操作的元素。

127.0.0.1:6379> lpush num 1 2  ## 先push 1,再push 2
(integer) 2
127.0.0.1:6379> rpush num 3 4 ##先push 3,再push 4
(integer) 4
127.0.0.1:6379> lrange num 0 -1 ##从0开始,显示4个元素
1) "2"
2) "1"
3) "3"
4) "4"
127.0.0.1:6379> llen num
(integer) 4
127.0.0.1:6379> lrange num -1 -2  ##start比end靠右,返回空列表
(empty list or set)
127.0.0.1:6379> lrange num -2 -1 ##从右边第二到右边第一
1) "3"
2) "4"
127.0.0.1:6379> lpush num 3 4 3 
(integer) 7
127.0.0.1:6379> lrange num 0 -1
1) "3"
2) "4"
3) "3"
4) "2"
5) "1"
6) "3"
7) "4"
127.0.0.1:6379> lrem num 2 3
(integer) 2      ## 一共删除了两个
127.0.0.1:6379> lrange num 0 -1
1) "4"
2) "2"
3) "1"
4) "3"
5) "4"
127.0.0.1:6379> 
127.0.0.1:6379> lrem num 0 4  ##删除所有值为4元素
(integer) 2              ## 一共删除了两个
127.0.0.1:6379> lrange num 0 -1
1) "2"
2) "1"
3) "3"
127.0.0.1:6379>  lrem num 2 3
(integer) 1   ##只删除了一个元素
127.0.0.1:6379> lrange num 0 -1
1) "2"
2) "1"
127.0.0.1:6379> lpush num 1 3
(integer) 4
127.0.0.1:6379> linsert num BEFORE 1 4 ##将4插入左边第一个1的前面
(integer) 5          ##插入后,一共有5个元素
127.0.0.1:6379> lrange num 0 -1
1) "3"
2) "4"
3) "1"
4) "2"
5) "1"
127.0.0.1:6379> rpoplpush num num1  ##转移一个元素
"1"
127.0.0.1:6379> lrange num1 0 -1
1) "1"
127.0.0.1:6379> rpoplpush num num1
"2"
127.0.0.1:6379> lrange num1 0 -1
1) "2"
2) "1"
127.0.0.1:6379> lrange num 0 -1  ##num中转移走了2个元素
1) "3"
2) "4"
3) "1"
127.0.0.1:6379> lpushx num 5  ##键名num存在,push成功
(integer) 4
127.0.0.1:6379> lrange num2 0 -1  
(empty list or set)
127.0.0.1:6379> lpushx num2 1 ##键名num2不存在,push失败
(integer) 0
127.0.0.1:6379> lrange num2 0 -1
(empty list or set)

用途

  • 列表页

set

redis的set使用值为空的散列表(hash table)实现。

  • SADD key member [member ...] 加入set中不存在的元素;返回成功加入的值的个数
    SREM key member [member ... ] 删除set中存在的元素;返回成功删除的个数
    SPOP key 随机选取一个元素,弹出并返回。如果key不存在,返回nil。
  • SMEMBERS key 获取所有元素
    SISMEMBER key member 判断元素是否在集合中,存在返回1;key或者member不存在,返回0。
    SCARD key 获取元素个数
  • SDIFF key1 [key2 ... ] 集合求差集,key1中存在,key2中不存在的
    SINTER key [key ... ] 集合求交集
    SUNION key [key ... ] 集合求并集
    SDIFFSTORE destination key1 [key2 ... ] 集合求差集,并存入destination中。
    SINTERSTORE destination key [key ... ] 集合求交集,并存入destination中。
    SUNIONSTORE destination key [key ... ] 集合求并集,并存入destination中。
  • SRANDMEMBER key [count] 随机选取count个元素,不带参数count时,选取一个。count=0,返回空列表;count > 0,选择min(count, scard)个数据,且不重复,最多返回所有元素; count < 0 选择|count|个元素,有可能重复。
  • SMOVE source destination member 原子性的将参数中的成员从source键移入到destination键所关联的Set中。因此在某一时刻,该成员或者出现在source中,或者出现在destination中。如果该成员在source中并不存在,该命令将不会再执行任何操作并返回0,否则,该成员将从source移入到destination。如果此时该成员已经在destination中存在,那么该命令仅是将该成员从source中移出。如果和Key关联的Value不是Set,将返回相关的错误信息。返回1表示正常移动,0表示source中并不包含参数成员。
127.0.0.1:6379> sadd set1 a b  ##添加两个不存在的元素
(integer) 2
127.0.0.1:6379> sadd set1 a c  ##添加成功一个元素c
(integer) 1
127.0.0.1:6379> smembers set1 ##获取所有元素
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> srem set1 d b  ##删除成功一个元素
(integer) 1
127.0.0.1:6379> smembers set1
1) "c"
2) "a"
127.0.0.1:6379> sismember set1 a 
(integer) 1
127.0.0.1:6379> sadd set1 b
(integer) 1
127.0.0.1:6379> sadd set2 a d e  
(integer) 3
127.0.0.1:6379> sadd set3 c h j 
(integer) 3
127.0.0.1:6379> sdiff set1 set2 set3 ##求差集,在set1中,同时不在set2,set3中的元素
1) "b"
127.0.0.1:6379> scard set1
(integer) 3
127.0.0.1:6379> sdiffstore set4 set1 set2 set3
(integer) 1
127.0.0.1:6379> smembers set4
1) "b"
127.0.0.1:6379> srandmember set1 0
(empty list or set)
127.0.0.1:6379> srandmember set1 1
1) "c"
127.0.0.1:6379> srandmember set1 2
1) "a"
2) "b"
127.0.0.1:6379> srandmember set1 5 ##返回min(5, 3)个元素,且不重复
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> srandmember set1 -5 ## 返回5个元素,可能重复
1) "a"
2) "b"
3) "c"
4) "c"
5) "c"
127.0.0.1:6379> spop set1
"c"
127.0.0.1:6379> smembers set1
1) "b"
2) "a"
127.0.0.1:6379> smembers set2
1) "d"
2) "a"
3) "e"
127.0.0.1:6379> smove set2 set1 c  ##source中不含移动的元素,不操作
(integer) 0
127.0.0.1:6379> smove set2 set1 e  ##移动一个元素到另一个集合
(integer) 1
127.0.0.1:6379> smembers set2
1) "d"
2) "a"
127.0.0.1:6379> smembers set1
1) "b"
2) "a"
3) "e"
用途
  • 唯一性数据集合,如某用户访问了哪些店铺等。
  • 集合相关场景。每个店铺的访问用户是一个set,查找同时访问多个店铺的用户群,查找访问一类店铺的用户群等。

sorted set

有序集合为每一个元素关联一个分数,并按照分数进行排序。 虽然集合中的每个元素都是不相同的,但是它们的分数却可以相同。

ZADD key score member [score member ... ] 添加新元素,如果元素已经存在,则更新分数。score支持整型和双精度浮点型。返回新添加的元素的个数(更新分数的不算)。inf和-inf分别表示正无穷和负无穷。
ZINCRBY key increment member 增加一个元素的分数,increment可以是负数。
ZSCORE key member 查询元素的分数
ZCARD key 获取集合中元素的个数
ZCOUNT key min max 指定分数范围内元素的个数,支持开闭区间。

ZRANGE key start end [WITHSCORES] 按照分数从小到大排序,获取排名在某个范围的元素列表,分数可选。闭区间,end可为负数,与lrange参数要求一致。
ZREVRANGE key start end [WITHSCORES] 按照分数从大到小排序。
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count ] 按分数从小到大顺序,返回分数在闭区间[min,max]的元素。可以指定开区间,在min前面加上"(",则表示(min, max]。支持inf和-inf。 offset和count指,在获得的元素列表的基础上,向后偏移offset个元素,并且只获取前count个元素。
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count ] 按分数从大到小顺序,返回分数在闭区间[min,max]的元素。注意max和min的参数位置。

ZREM key member [member ... ] 删除一个或者多个元素
ZREMRANGEBYRANK key start end 按照范围排名删除元素,闭区间。索引从0开始。
ZREMRANGEBYSCORE key min max 按照分数排名,删除分数在[min,max]的元素,支持开区间。

ZRANK key member 按分数从小到大排序,获取元素member的排名,分数最小的排名是0
ZREVRANK key member 按分数从大到小排序,获取元素member的排名,分数最大的排名是0

ZINTERSTORE destination numkeys key [key ... ] [WEIGHTS weight [weight ... ]] [AGGREGATE SUM|MIN|MAX] 计算numkeys个有序集合的交集,存储在有序集合destination里面,返回destination的元素个数。
WEIGHTS参数设置每个集合的权重,每个集合在参与计算时,元素的分数会被乘上该集合的权重。
AGGREGATE表示destination中元素分数的计算方式:

  • AGGREGATE为SUM(默认值)时,则destination中元素的分数,是每个参与计算的集合中该元素分数的和。
  • AGGREGATE为MAX时,则destination中元素的分数,是每个参与计算的集合中该元素分数的最大值。
  • AGGREGATE为MIN时,则destination中元素的分数,是每个参与计算的集合中该元素分数的最小值。

ZUNIONSTORE destination numkeys key [key ... ] [WEIGHTS weight [weight ... ]] [AGGREGATE SUM|MIN|MAX] 与上面类似。

127.0.0.1:6379> zadd zset1 10 sh 40 bj ##添加2个元素
(integer) 2
127.0.0.1:6379> zadd zset1 20 sh 50 hz 80 cd ##更新1个,添加2个
(integer) 2
127.0.0.1:6379> zscore zset1 sh ##获取sh的分数,已更新为20
"20"
127.0.0.1:6379> zrange zset1 1 -1 ##从第二个元素开始的所有元素
1) "bj"
2) "hz"
3) "cd"
127.0.0.1:6379> zrange zset1 0 -1 withscores ##获取全部元素
1) "sh"
2) "20"
3) "bj"
4) "40"
5) "hz"
6) "50"
7) "cd"
8) "80"
127.0.0.1:6379> zadd zset1 inf zy ##添加正无穷
(integer) 1
127.0.0.1:6379> zrangebyscore zset1 (50 inf withscores  ## 分数大于50的元素
1) "cd"
2) "80"
3) "zy"
4) "inf"
127.0.0.1:6379> zrangebyscore zset1 50 inf withscores  limit 1 2 
## 分数大于等于50的元素,从第二个开始,取2个
1) "cd"
2) "80"
3) "zy"
4) "inf"
127.0.0.1:6379> zincrby zset1 5 hz ## 给元素hz加5分
"55" 
127.0.0.1:6379> zrangebyscore zset1 (50 inf  ## 添加成功
1) "hz"
2) "cd"
3) "zy"
127.0.0.1:6379> zrange zset1 0 -1 WITHSCORES ##查询所有元素1) "sh"2) "20"3) "bj"4) "40"5) "hz"6) "55"7) "cd"8) "80"9) "zy"
10) "inf"
127.0.0.1:6379> zcount zset1 0 inf ##获取元素个数
(integer) 5
127.0.0.1:6379> zcount zset1 (55 inf ##大于55元素个数
(integer) 2127.0.0.1:6379> zrem zset1 zy  ##删除zy
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1 ## 剩下四个
1) "sh"
2) "bj"
3) "hz"
4) "cd"
127.0.0.1:6379> zremrangebyrank zset1 1 2 ## 按照排名,删除第2名到第3名
(integer) 2
127.0.0.1:6379> zrange zset1 0 -1  ## 只剩下2个
1) "sh"
2) "cd"127.0.0.1:6379> zadd zs1 1 a 2 b 
(integer) 2
127.0.0.1:6379> zadd zs2 10 a 20 b
(integer) 2
## zs1和zs2取交集,zs1的权重为1,zs2的权重为0.5,所以a的结果分数是1+10*0.5=6
127.0.0.1:6379> zinterstore zs3 2 zs1 zs2 WEIGHTS 1 0.5 AGGREGATE sum
(integer) 2
127.0.0.1:6379> zrange zs3 0 -1 withscores
1) "a"
2) "6"
3) "b"
4) "12"

用途

  • 排序的场景。如按照博客访问量排序文章列表。key是用户id,set中的数据是文章id,每个文章id关联一个score(访问量)。

与列表的比较

  • 都可以获取某一范围的元素
  • 列表类型通过链表实现,获取两端数据速度快,元素增多后,访问中间数据速度较慢。所以适合“新鲜事”和“日志”一类的场景。
  • 有序集合是通过散列表和跳跃表实现的,所以读取位于中间部分的数据的速度也很快。时间复杂度O(log(N))。
  • 列表不能简单的调整某个元素的位置,有序集合可以。(修改元素的分数)
  • 有序集合比列表更耗内存。

资料:

http://www.cnblogs.com/stephen-liu74/archive/2012/04/16/2370212.html
http://www.cnblogs.com/allout-geng/p/5923047.html

转载于:https://www.cnblogs.com/shoren/p/redis-types.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python与MySQL数据库连接

Python3 MySQL 数据库连接 MySQL 可应用于多种语言&#xff0c;包括 PERL, C, C, JAVA 和 PHP 什么是 PyMySQL&#xff1f; PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库&#xff0c;Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范&a…

mysql 日志_MySQL日志系统

MySQL日志系统MySQL有两个重要的日志系统&#xff0c;分别是 redo log (重做日志) 和 bin log (归档日志) 。这两种日志有以下三点不同。redo log 是 InnoDB 引擎特有的&#xff1b;binlog 是 MySQL 的 Server 层实现的&#xff0c;所有引擎都可以使用。redo log 是物理日志&am…

盛大游戏杯第十五届上海大学程序设计联赛暨上海金马五校赛

编程1小时&#xff0c;提交4小时 做这种比赛一定要选一个好OJ啊 黑白图像直方图 发布时间: 2017年7月8日 21:00 最后更新: 2017年7月8日 22:38 时间限制: 1000ms 内存限制: 128M 描述 在一个矩形的灰度图像上&#xff0c;每个像素点或者是黑色的或者是白色的。黑色像素点…

对几个重要问题的阐述

由于DPB中间的参考帧的MV都是以4X4块为单位&#xff0c;现在以8X8块作Direct mode模式&#xff0c;所以必须对子块的MV作合并&#xff0c; JM采用的东西是如下图的方式: x o | o x o o | o o - - - - - o o | o o x o | o x 每8X8块取外角上的4X4块的MV. 算法如下: <<<…

【MySQL】基于Docker的Mysql主从复制搭建

基于Docker的Mysql主从复制搭建 为什么基于Docker搭建&#xff1f; 资源有限 虚拟机搭建对机器配置有要求&#xff0c;并且安装mysql步骤繁琐 一台机器上可以运行多个Docker容器 Docker容器之间相互独立&#xff0c;有独立ip&#xff0c;互不冲突 Docker使用步骤简便&#xf…

Web开发介绍

Web开发介绍 一,认识一个网站 最早的软件都是运行在大型机上的&#xff0c;软件使用者通过“哑终端”登陆到大型机上去运行软件。 后来随着PC机的兴起&#xff0c;软件开始主要运行在桌面上&#xff0c;而数据库这样的软件运行在服务器端&#xff0c;这种Client/Server模式简…

python云端系统开发入门_Python云端系统开发入门

第01课 初识Django 课时1Django框架介绍 00 : 14 : 33 开始学习 课时2工程搭建1 00 : 28 : 50 开始学习 课时3工程搭建2 00 : 13 : 22 开始学习 第02课 请求和响应的处理 课时1获取请求url的参数 00 : 07 : 57 开始学习 课时2获取请求url的查询字符串 00 : 12 : 01 开始学习 课…

IBM 安全部门 CTO:AI 必须被重新定义为“增强智能”

编者按&#xff1a;随着人工智能的发展&#xff0c;人们对它逐渐有误会、恐惧之心。如果能够利用好人工智能&#xff0c;特别是在网络安全领域&#xff0c;它将成为人类对抗网络犯罪强有力的武器。IBM 安全部门的 CTO Sandy Bird 认为现在的人工智能应该被重新定义为“增强智能…

【Nginx】通过反向代理配置本地图床功能

安装nginx sudo apt-get install nginx配置nginx.conf sudo vim /etc/nginx/nginx.conf worker_processes auto; pid /run/nginx.pid;events {worker_connections 768;# multi_accept on; }http {sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash…

构建之法第二章

单元测试&#xff1a;一个开发人员要面对测试一个单元时只给出单元的代码而没有规格说明这样吃力不讨好的任务.你怎样做才会有更多的收获,而不仅仅是发现编译器的Bug?第一步是理解这个单元原本要做什么, --- 不是它实际上做了什么. 比较有效的方法是倒推出一个概要的规格说明.…

帧内预测模式提取

if (input->rdopt) { int mb_available_up; int mb_available_left; int mb_available_up_left; min_rdcost max_rdcost; // precompute all new chroma intra prediction modes // 对色度进行帧内预测 IntraChromaPredict…

Django简介以及安装

Django简介 1. 认识Django Django是一个高级的Python Web框架&#xff0c;它鼓励快速开发和清洁&#xff0c;务实的设计。由经验丰富的开发人员构建&#xff0c;它负责Web开发的许多麻烦&#xff0c;因此您可以专注于编写应用程序&#xff0c;而无需重新创建轮子。它是免费的…

python基础笔试面试题_python基础面试常见题

Python是目前市面上&#xff0c;我个人认为是最简洁、最优雅、最有前途、最全能的编程语言&#xff0c;没有之一。 2、通过什么途径学习的Python&#xff1f; 通过自学&#xff0c;包括网上查看一些视频&#xff0c;购买一些相关专业的书籍。 3、Python和Java、PHP、C、C#、C等…

django-rest-swagger显示接口备注内容

Swagger是一個API開發者的工具框架&#xff0c;用於生成、描述、調用和可視化RESTful風格的Web服務。總體目標是使客戶端和文件系統服務器以同樣的速度來更新&#xff0c;方法&#xff0c;參數和模型緊密集成到服務器端的代碼中&#xff0c;允許API始終保持同步。 在使用 djan…

安全和连接是IoT联网设备2大挑战

IoT正在推动500亿个联网设备在未来10年内从工业、零售、智能照明、智慧城市、汽车、农业、可穿戴设备、智能建筑、医疗市场涌现出来&#xff0c;ARM处理器部门市场营销总监Ian Smythe表示&#xff1a;“到2020年&#xff0c;消费电子和健康、智慧城市和物流、汽车和运输领域的I…

windows下部署免费ssl证书(letsencrypt)

随着网络的发展&#xff0c;网络安全也越来越重要&#xff0c;对于网站来说&#xff0c;从Http升级到https也是我们要做的首要事情。要实现https&#xff0c;首先我们需要申请一张SSL证书&#xff0c;这篇文章我主要介绍下边这几个方面&#xff1a; 1. SSL简单介绍 2. 免费Lete…

Django之URLconf路由

URLconf路由 一个干净优雅的URL方案是高质量Web应用程序中的一个重要细节。 Django可以让你设计URL&#xff0c;无论你想要什么&#xff0c;没有框架限制。 要为应用程序设计URL&#xff0c;您可以非正式地创建一个名为URLconf&#xff08;URL配置&#xff09;的Python模块。…

python中什么是关键字参数_如何使用python语言中函数的关键字参数的用法

一般情况下&#xff0c;在调用函数时&#xff0c;使用的是位置参数&#xff0c;即是按照参数的位置来传值&#xff1b;关键字参数是按照定义函数传入的参数名称来传值的。那么&#xff0c;关键字参数怎么使用&#xff1f;工具/原料 python pycharm 截图工具 WPS 方法/步骤 1 打…

HTML块级元素

在HTML5出现之前&#xff0c;人们一般把元素分为块级、内联和内联块元素。本文将详细介绍HTML块级元素h标题(Heading)元素有六个不同的级别&#xff0c;<h1>是最高级的&#xff0c;而<h6>则是最低的。一个标题元素能简要描述该节的主题从<h1>到<h6>&am…

【SSL】HTTPS配置全过程

服务器配置https协议 HTTPS&#xff0c;是以安全为目标的HTTP通道&#xff0c;简单讲是HTTP的安全版。即HTTP下加入SSL层&#xff0c;HTTPS的安全基础是SSL&#xff0c;因此加密的详细内容就需要SSL。 配置HTTPS就需要证书&#xff0c;关于证书方面不做过多解释&#xff0c;只…