Rumah > pangkalan data > Redis > teks badan

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

WBOY
Lepaskan: 2023-05-30 19:57:18
ke hadapan
3326 orang telah melayarinya

Pengenalan

Redis ditulis dalam bahasa ANSI C dan merupakan pangkalan data Nilai Kunci sumber terbuka yang boleh beroperasi dalam ingatan dan menyokong kegigihan. Ia mempunyai struktur data yang kaya, fungsi urus niaga, dan memastikan atomicity arahan. Membaca dan menulis pangkalan data dalam memori adalah sangat pantas, mencapai kadar 10w/s, jadi ia biasanya digunakan dalam senario aplikasi seperti perubahan data pantas, komunikasi masa nyata dan caching. Tetapi pangkalan data dalam memori biasanya perlu mempertimbangkan saiz memori mesin.

Redis menyediakan 16 pangkalan data logik (db0-db15 setiap pangkalan data logik adalah bebas daripada satu sama lain, pangkalan data db0 digunakan secara lalai. Apabila menyambung dalam Python, anda boleh memilih pangkalan data kedua dengan menentukan pangkalan data, contohnya, menggunakan arahan pilih 2.

Struktur data biasa

  • String-string

  • list-list

  • Hash-Hash

  • Set-set

  • ZSet-tempahan set

  • Bitmap-Bitmap

Dalam python kami menggunakan perpustakaan redis-py untuk mengendalikan pangkalan data Redis, yang akan diserlahkan di bawah.

Prasyarat: Pangkalan data Redis perlu dipasang Jika tidak, klik di sini

Pasang

pip3 install redis
Salin selepas log masuk

Sambung

Kaedah pertama: Normal

import redis
 
redis_conn = redis.Redis(host='127.0.0.1', port= 6379, password= 'your pw', db= 0)
Salin selepas log masuk
<. 🎜>Cara kedua: kolam sambungan

import redis
 
redis_pool = redis.ConnectionPool(host=&#39;127.0.0.1&#39;, port= 6379, password= &#39;your pw&#39;, db= 0)
redis_conn = redis.Redis(connection_pool= redis_pool)
Salin selepas log masuk

Jenis nilai pulangan aksara dalam redis adalah semua jenis bait

Rentetan rentetan (pasangan nilai kunci)

Dalam redis, a kunci sepadan dengan nilai

1. Set rentetan menetapkan nilai kunci tunggal

set(nama, nilai, ex=Tiada, px=Tiada, nx =False, xx=False)

  • cth: masa tamat tempoh (saat), redis akan memadamnya secara automatik selepas masa tamat

  • px: masa tamat tempoh (milisaat), redis akan memadamkannya secara automatik selepas masa tamat. Hanya pilih salah satu daripada ex dan px

  • nx: Jika ditetapkan kepada Benar, operasi set semasa hanya akan dilaksanakan jika nama tidak wujud

  • xx: Jika ditetapkan kepada Benar, operasi set semasa akan dilaksanakan hanya jika nama wujud

  • redis_conn.set(&#39;name_2&#39;, &#39;Zarten_2&#39;)
    Salin selepas log masuk

2.String get mendapat nilai tunggal

v = redis_conn.get(&#39;name_1&#39;)
print(v)
Salin selepas log masuk

3.String mset menetapkan berbilang nilai kunci

mset(*args, **kwargs)

redis_conn.mset(name_1= &#39;Zarten_1&#39;, name_2= &#39;Zarten_2&#39;)
Salin selepas log masuk

atau

name_dict = {
    &#39;name_4&#39; : &#39;Zarten_4&#39;,
    &#39;name_5&#39; : &#39;Zarten_5&#39;
}
redis_conn.mset(name_dict)
Salin selepas log masuk

4.String mget mendapat berbilang nilai

mget(keys, *args)

m = redis_conn.mget(&#39;name_1&#39;, &#39;name_2&#39;)
#m = redis_conn.mget([&#39;name_1&#39;, &#39;name_2&#39;]) 也行
print(m)
Salin selepas log masuk

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

5.String getset untuk Set a sedia ada nilai baharu untuk kunci dan kembalikan nilai asal

getset(nama, nilai)

Apabila kunci yang diberikan tidak wujud, nilai baharunya akan ditetapkan, tetapi nilai pulangan For None

v = redis_conn.getset(&#39;name_1&#39;, &#39;hi&#39;)
Salin selepas log masuk

6.String setrange Mengubah nilai kunci mengikut indeks

setrange(name, offset, value)

Return nilai ialah: panjang rentetan diubah suai

  • nama: kunci, ditambah secara automatik apabila yang diberikan tidak wujud

  • mengimbangi: mengimbangi, ke Bermula dari 0

  • nilai: aksara atau rentetan diubah suai, rentetan dilanjutkan ke belakang dengan mengimbangi

  • length = redis_conn.setrange(&#39;name_2&#39;, 1, &#39;zhihu&#39;)
    print(length)
    Salin selepas log masuk

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

7.String getrange Mendapat sebahagian daripada nilai kunci mengikut indeks

Jika kunci yang diberikan tidak wujud, kembalikan nilai nol b''

getrange( kunci, mula, tamat)

v = redis_conn.getrange(&#39;name_4&#39;, 0, 2)
Salin selepas log masuk

Hasilnya ialah:

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

8.String strlen mendapat panjang nilai

strlen(name)

Apabila kunci yang diberikan tidak wujud, nilai pulangan ialah 0

length = redis_conn.strlen(&#39;name_2&#39;)
Salin selepas log masuk

9 nilai jenis incr int meningkat (penurunan)

Begitu juga: Decrement, decr(name, amount=1)

Nilai yang sepadan dengan kunci yang diberikan mestilah integer atau nilai rentetan, Jika tidak, ralat akan dilaporkan. Julat autokenaikan lalai ialah 1

incr(name, amount=1)

Nilai pulangan ialah: nilai diubah suai, jenis int

redis_conn.set(&#39;num_2&#39;, 2)
#redis_conn.set(&#39;num_2&#39;, &#39;2&#39;) 都行
 
v = redis_conn.incr(&#39;num_2&#39;)
Salin selepas log masuk

10. String incrbyfloat Nilai jenis titik terapung dinaikkan

incrbyfloat(name, amount=1.0)

Nilai pulangan ialah: floating point type float

rreee

11 .Nilai tambah rentetan diikuti dengan

tambah(kunci, nilai)

Jika kunci yang diberikan tidak wujud, tetapkan nilai baharu

Nilai pulangan diubah suai Panjang rentetan

v = redis_conn.incrbyfloat(&#39;num_2&#39;)
Salin selepas log masuk

Hasilnya ialah:

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

Senarai senarai

Dalam redis, satu kunci sepadan ke senarai

12.Senaraikan lpush Tambah nilai rpush (kanan) ke kiri senarai

lpush(nama, *nilai)

Apabila terdapat berbilang nilai nilai, dari kiri ke Tambah ke kiri senarai secara bergilir-gilir, jenisnya boleh berbeza

Apabila kunci yang diberikan tidak wujud, buat senarai baharu

Kembali nilai: saiz senarai

length = redis_conn.append(&#39;name_5&#39;, &#39;666&#39;)
Salin selepas log masuk

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

13.Senaraikan lpushx Apabila kekunci wujud, tambahkannya ke rpushx kiri (paling kanan) senarai

lpushx(nama, nilai)

Apabila hanya kunci wujud , telah ditambahkan. Jika kunci tidak wujud, ia tidak akan ditambah dan senarai tidak akan dibuat

返回值为:列表大小

v = redis_conn.lpushx(&#39;Zarten_1&#39;, &#39;hehe&#39;)
Salin selepas log masuk

14.List llen 获取所给键的列表大小

llen(name)

v = redis_conn.llen(&#39;Zarten&#39;)
Salin selepas log masuk

15.List linsert 在列表中间插入新值

linsert(name, where, refvalue, value)

  • name:键名

  • where:位置,前面(BEFORE)或后面(AFTER)

  • refvalue:指定哪个值的前后插入

  • value:插入的新值

返回值:插入后列表的长度,若返回-1,则refvalue不存在

插入前的数据:

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

v = redis_conn.linsert(&#39;Zarten&#39;, &#39;AFTER&#39;, 6, &#39;b&#39;)
Salin selepas log masuk

插入后的数据:

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

16.List lset 列表中通过索引赋值

lset(name, index, value)

返回值:成功 True 否则 False

v = redis_conn.lset(&#39;Zarten&#39;, 2, &#39;cc&#39;)
Salin selepas log masuk

17.List lindex 通过索引获取列表值

lindex(name, index)

v = redis_conn.lindex(&#39;Zarten&#39;, 2)
Salin selepas log masuk

18.List lrange 列表中获取一段数据

lrange(name, start, end)

返回值:List类型的一段数据

v = redis_conn.lrange(&#39;Zarten&#39;, 2, 5)
Salin selepas log masuk

19.List lpop 删除左边的第一个值 rpop(右边)

lpop(name)

返回值:被删除元素的值

v = redis_conn.rpop(&#39;Zarten&#39;)
Salin selepas log masuk

20.List lrem 删除列表中N个相同的值

lrem(name, value, num=0)

  • name:键名

  • value:需删除的值

  • num:删除的个数 整数表示从左往右 负数表示从右往左 例如:2 -2

返回值:返回删除的个数

v = redis_conn.lrem(&#39;Zarten&#39;, &#39;hehe&#39;, -2)
Salin selepas log masuk

21.List ltrim 删除列表中范围之外的所有值

ltrim(name, start, end)

返回值:成功 True

v = redis_conn.ltrim(&#39;Zarten&#39;, 5, 10)
Salin selepas log masuk

22.List blpop 删除并返回列表最左边的值 brpop(最右边)

blpop(keys, timeout=0)

  • keys:给定的键

  • timeout:等待超时时间,默认为0,表示一直等待

返回值:tuple类型 形如: (键名, 删除的值) (b'Zarten', b'hehe')

v = redis_conn.blpop(&#39;Zarten&#39;)
Salin selepas log masuk

23.List rpoplpush 一个列表中最右边值取出后添加到另一个列表的最左边 brpoplpush阻塞版本

rpoplpush(src, dst)

brpoplpush(src, dst, timeout=0)为rpoplpush的阻塞版本,timeout为0时,永远阻塞

返回值:取出的元素值

v = redis_conn.rpoplpush(&#39;Zarten&#39;, &#39;Zhihu&#39;)
Salin selepas log masuk

Hash 哈希

内部存储为各个键值对

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

24.Hash hset 哈希中添加一个键值对

hset(name, key, value)

key存在,则修改,否则添加

返回值:返回添加成功的个数 int

v = redis_conn.hset(&#39;Zarten&#39;, &#39;age&#39;, 10)
Salin selepas log masuk

25.Hash hmset 设置哈希中的多个键值对

hmset(name, mapping)

mapping:dict 类型

返回值:成功 True

v = redis_conn.hmset(&#39;Zarten&#39;, {&#39;sex&#39;:1, &#39;tel&#39;:&#39;123&#39;})
Salin selepas log masuk

26.Hash hmget 获取哈希中多个键值对

hmget(name, keys, *args)

返回值:值的列表 list 形如: [b'1', b'123']

v = redis_conn.hmget(&#39;Zarten&#39;, [&#39;sex&#39;, &#39;tel&#39;])
#v = redis_conn.hmget(&#39;Zarten&#39;, &#39;sex&#39;, &#39;tel&#39;) 也ok
Salin selepas log masuk

27.Hash hget 获取指定key的值

hget(name, key)

v = redis_conn.hget(&#39;Zarten&#39;, &#39;age&#39;)
Salin selepas log masuk

28.Hash hgetall 获取哈希中所有的键值对

hgetall(name)

返回值:dict类型

v = redis_conn.hgetall(&#39;Zarten&#39;)
Salin selepas log masuk

29.Hash hlen 获取哈希中键值对的个数

hlen(name)

v = redis_conn.hlen(&#39;Zarten&#39;)
Salin selepas log masuk

30.Hash hkeys 获取哈希中所有的键key

hkeys(name)

返回值:list类型

v = redis_conn.hkeys(&#39;Zarten&#39;)
Salin selepas log masuk

31.Hash hvals 获取哈希中所有的值value

hvals(name)

返回值:list类型

v = redis_conn.hvals(&#39;Zarten&#39;)
Salin selepas log masuk

32.Hash hexists 检查哈希中是否有某个键key

hexists(name, key)

返回值:有 True ;否则 False

v = redis_conn.hexists(&#39;Zarten&#39;, &#39;b&#39;)
Salin selepas log masuk

33.Hash hdel 删除哈希中键值对(key-value)

hdel(self, name, *keys)

返回值:int 删除的个数

v = redis_conn.hdel(&#39;Zarten&#39;, &#39;age&#39;)
Salin selepas log masuk

34.Hash hincrby 自增哈希中key对应的value值(必须整数数值类型)

hincrby(name, key, amount=1)

若所给的key不存在则创建,amount默认增加1,可以为负数

返回值:int 增加后的数值

v = redis_conn.hincrby(&#39;Zarten&#39;, &#39;sex&#39;, -3)
Salin selepas log masuk

35.Hash hincrbyfloat 自增浮点数 同上hincrby

hincrbyfloat(name, key, amount=1.0)

36.Hash expire 设置整个键的过期时间

expire(name, time)

time:秒,时间一到,立马自动删除

v = redis_conn.expire(&#39;Zarten&#39;, 10)
Salin selepas log masuk

37.Hash hscan 增量迭代获取哈希中的数据

hscan(name, cursor=0, match=None, count=None)

  • name:redis的name

  • cursor:游标(基于游标分批取获取数据)

  • match:匹配指定key,默认None 表示所有的key

  • count:每次分片最少获取个数,默认None表示采用Redis的默认分片个数

返回值:tuple 类型 ;(扫描位置,所有dict数据)

v = redis_conn.hscan(&#39;Zarten&#39;)
Salin selepas log masuk

38.Hash hscan_iter 返回hscan的生成器

hscan_iter(name, match=None, count=None)

参照上面函数hscan

v = redis_conn.hscan_iter(&#39;Zarten&#39;)
for i in v:
    print(type(i), i)
Salin selepas log masuk

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

Set 集合

集合中的元素不重复,一般用于过滤元素

39.Set sadd 添加元素到集合中

sadd(name, *values)

若插入已有的元素,则自动不插入

v = redis_conn.sadd(&#39;Zarten&#39;, &#39;apple&#39;, &#39;a&#39;, &#39;b&#39;, &#39;c&#39;)
Salin selepas log masuk

40.Set scard 返回集合中元素的个数

scard(name)

v = redis_conn.scard(&#39;Zarten&#39;)
Salin selepas log masuk

41.Set smembers 获取集合中的所有元素

smembers(name)

返回值:set类型,形如: {b'a', b'apple', b'c', b'b'}

v = redis_conn.smembers(&#39;Zarten&#39;)
Salin selepas log masuk

42.Set srandmember 随机获取一个或N个元素

srandmember(name, number=None)

  • name:键名

  • number:一个或N个,默认返回一个。若返回N个,则返回List类型

返回值:返回一个值或一个列表

v = redis_conn.srandmember(&#39;Zarten&#39;, 2)
Salin selepas log masuk

43.Set sismember 判断某个值是否在集合中

sismember(name, value)

返回值:True 在 False 不在

v = redis_conn.sismember(&#39;Zarten&#39;, &#39;appl&#39;)
Salin selepas log masuk

44.Set spop 随机删除并返回集合中的元素

spop(name)

v = redis_conn.spop(&#39;Zarten&#39;)
Salin selepas log masuk

45.Set srem 删除集合中的一个或多个元素

srem(name, *values)

返回值:返回删除的个数 int

v = redis_conn.srem(&#39;Zarten&#39;, &#39;c&#39;, &#39;a&#39;)
Salin selepas log masuk

46.Set smove 将一个集合中的值移动到另一个集合中

smove(src, dst, value)

若value不存在时,返回False

返回值:成功 True

v = redis_conn.smove(&#39;Zarten&#39;, &#39;Fruit&#39;, &#39;apple&#39;)
Salin selepas log masuk

47.Set sdiff 返回在一个集合中但不在其他集合的所有元素(差集)

sdiff(keys, *args)

在keys集合中,不在其他集合中的元素

返回值:set类型 {b'2', b'4', b'3', b'1'}

v = redis_conn.sdiff(&#39;Zarten&#39;, &#39;Fruit&#39;)
Salin selepas log masuk

48.Set sdiffstore 上面的sdiff的返回值(差集)保存在另一个集合中

sdiffstore(dest, keys, *args)

在keys集合中,不在其他集合中的元素保存在dest集合中

  • dest:新的集合,设置的新集合,旧集合会被覆盖

返回值:int 返回作用的个数

v = redis_conn.sdiffstore(&#39;Left&#39;, &#39;Zarten&#39;, &#39;Fruit&#39;)
Salin selepas log masuk

49.Set sinter 返回一个集合与其他集合的交集

sinter(keys, *args)

返回值:set类型

v = redis_conn.sinter(&#39;Zarten&#39;, &#39;Fruit&#39;)
Salin selepas log masuk

50.Set sinterstore 返回一个集合与其他集合的交集,并保存在另一个集合中

sinterstore(dest, keys, *args)

  • dest:另一个集合,设置新集合,旧集合元素会被覆盖

v = redis_conn.sinterstore(&#39;Left&#39;, &#39;Zarten&#39;, &#39;Fruit&#39;)
Salin selepas log masuk

51.Set sunion 返回一个集合与其他集合的并集

sunion(keys, *args)

v = redis_conn.sunion(&#39;Zarten&#39;, &#39;Fruit&#39;)
Salin selepas log masuk

52.Set sunionstore 返回一个集合与其他集合的并集,并保存在另一个集合中

sunionstore(dest, keys, *args)

  • dest:另一个集合,设置新集合,旧集合元素会被覆盖

返回值:新集合元素个数

v = redis_conn.sunionstore(&#39;Left&#39;, &#39;Zarten&#39;, &#39;Fruit&#39;)
Salin selepas log masuk

Zset 有序集合

有序集合比集合多了一个分数的字段,可对分数升序降序

53.Zset zadd 有序集合中添加元素

zadd(name, *args, **kwargs)

添加元素时需指定元素的分数

返回值:返回添加的个数

2种方式如下:

v = redis_conn.zadd(&#39;Zarten&#39;, &#39;a&#39;, 3, &#39;b&#39;, 4)
#v = redis_conn.zadd(&#39;Zarten&#39;, c= 5, d= 6)
Salin selepas log masuk

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

54.Zset zcard 返回有序集合中元素个数

zcard(name)

v = redis_conn.zcard(&#39;Zarten&#39;)
Salin selepas log masuk

55.Zset zcount 返回有序集合中分数范围内的元素个数

zcount(name, min, max)

包含min max

返回值:个数 int

v = redis_conn.zcount(&#39;Zarten&#39;, 3, 5)
Salin selepas log masuk

56.Zset zscore 返回有序集合中指定某个值的分数

zscore(name, value)

返回值:float 类型的分数;形如: -5.0

v = redis_conn.zscore(&#39;Zarten&#39;, &#39;zhi&#39;)
Salin selepas log masuk

57.Zset zincrby 增加有序集合中某个值的分数

zincrby(name, value, amount=1)

  • value:若存在,则增加其amount分数;若不存在,则增加新值以及对应的分数

  • amount:增加的值,可以为负数

返回值:增加后的分数 float类型 ;形如: -5.0

v = redis_conn.zincrby(&#39;Zarten&#39;, &#39;zhi&#39;, -5)
Salin selepas log masuk

58.Zset zrem 删除有序集合中的某个或多个值

zrem(name, *values)

返回值:返回删除的个数

v = redis_conn.zrem(&#39;Zarten&#39;, &#39;zhi&#39;, &#39;a&#39;)
Salin selepas log masuk

59.Zset zremrangebyrank 删除有序集合元素根据排序范围

zremrangebyrank(name, min, max)

返回值:删除个数 int

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

v = redis_conn.zremrangebyrank(&#39;Zarten&#39;, 1, 3)
Salin selepas log masuk

删除后如下图:

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

60.Zset zremrangebyscore 删除有序集合根据分数范围

zremrangebyscore(name, min, max)

返回值:删除个数 int

v = redis_conn.zremrangebyscore(&#39;Zarten&#39;, 8, 15)
Salin selepas log masuk

61.Zset zrank 返回某个值在有序集合中的分数排名(从小到大) zrevrank(从大到小)

zrank(name, value)

返回值:value在name中的分数排名值,分数从小到大排名,从0开始

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

v = redis_conn.zrank(&#39;Zarten&#39;, &#39;b&#39;)
Salin selepas log masuk

返回值如下图:

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

62.Zset zrange 返回有序集合分数排序的一段数据

zrange(name, start, end, desc=False, withscores=False, score_cast_func=float)

  • name:redis的name

  • start:有序集合索引起始位置(非分数)

  • end:有序集合索引结束位置(非分数)

  • desc:排序规则,默认按照分数从小到大排序

  • withscores:是否获取元素的分数,默认只获取元素的值

  • score_cast_func:对分数进行数据转换的函数

返回值:list类型 [(b'tt', 10.0), (b'd', 6.0), (b'c', 5.0)]

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

v = redis_conn.zrange(&#39;Zarten&#39;, 1, 3, True, True, score_cast_func=float)
Salin selepas log masuk

结果如图:

Cara menggunakan Python untuk mengendalikan pangkalan data Redis

Bitmap 位图

bitmap中存放二进制的位0和1,类似位数组。典型应用是基于redis的布隆过滤器。

属于String字符串数据结构,固bit 映射被限制在 512 MB 之内(2^32)

63.Bitmap setbit 设置位图的值

setbit(name, offset, value)

  • name:redis键名

  • offset:偏移量,大于等于0。当偏移伸展时,空白位置以0填充

  • value:二进制值 0或1

v = redis_conn.setbit(&#39;Zarten_2&#39;, 100, 1)
Salin selepas log masuk

64.Bitmap getbit 返回位图指定偏移量的值

getbit(name, offset)

返回0或1

v = redis_conn.getbit(&#39;Zarten_2&#39;, 101)
Salin selepas log masuk

65.Bitmap bitcount 返回位图中二进制为1的总个数

bitcount(key, start=None, end=None)

start end指定开始和结束的位,默认整个位图

v = redis_conn.bitcount(&#39;Zarten_2&#39;, 100, 1000)
Salin selepas log masuk

全局函数

全局函数对任何数据结构都适用

66.全局函数 delete 删除redis中一个或多个键的所有数据

delete(*names)

返回值:int 删除的个数

v = redis_conn.delete(&#39;name&#39;, &#39;name_1&#39;)
Salin selepas log masuk

67.全局函数 exists 判断redis中是否存在某个键

exists(name)

返回值:存在True;反之False

v = redis_conn.exists(&#39;name&#39;)
Salin selepas log masuk

68.全局函数 rename 重命名redis中键名

rename(src, dst)

返回值:成功True

v = redis_conn.rename(&#39;name_2&#39;, &#39;name_100&#39;)
Salin selepas log masuk

69.全局函数 move 移动redis中某个键所有数据到某个db中

move(name, db)

返回值:成功True

v = redis_conn.move(&#39;name_100&#39;, 12)
Salin selepas log masuk

70.全局函数 randomkey 随机获取redis中某个键名

randomkey()

返回值:形如: b'name_55'

v = redis_conn.randomkey()
Salin selepas log masuk

71.全局函数 type 查看redis中某个键数据结构类型

type(name)

返回值:字符串(字节形式) 形如: b'hash'

  • none (key不存在)

  • string (字符串)

  • list (列表)

  • set (集合)

  • zset (有序集)

  • hash (哈希表)

v = redis_conn.type(&#39;name_4&#39;)
Salin selepas log masuk

Atas ialah kandungan terperinci Cara menggunakan Python untuk mengendalikan pangkalan data Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan