成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Python操作redis的方法-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買(mǎi)多久送多久,劃算不套路!

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到汕頭網(wǎng)站設(shè)計(jì)與汕頭網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國(guó)際域名空間、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋汕頭地區(qū)。

這篇文章將為大家詳細(xì)講解有關(guān)Python操作redis的方法,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

python3操作redis

redis也被稱為緩存

1.redis是一個(gè)key-value存儲(chǔ)系統(tǒng),沒(méi)有ForeignKey和ManyToMany的字段。
2.在redis中創(chuàng)建的數(shù)據(jù)彼此之間是沒(méi)有關(guān)系的,所以也被稱為是非關(guān)系型數(shù)據(jù)庫(kù)。
3.它支持存儲(chǔ)包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類(lèi)型)等數(shù)據(jù)類(lèi)型。
4.redis支持的數(shù)據(jù)類(lèi)型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。
5.redis支持各種不同方式的排序。為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。
6.redis會(huì)周期性的把更新的數(shù)據(jù)寫(xiě)入磁盤(pán)或者把修改操作寫(xiě)入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步。

在正常的服務(wù)器中,redis是運(yùn)行在內(nèi)存中的,而數(shù)據(jù)庫(kù)是運(yùn)行在服務(wù)器的硬盤(pán)上的。

因?yàn)閮?nèi)存的運(yùn)行速度遠(yuǎn)遠(yuǎn)快于硬盤(pán)的轉(zhuǎn)速,所以redis查詢速度遠(yuǎn)快于保存在硬盤(pán)的數(shù)據(jù)庫(kù)。

同樣,因?yàn)閞edis是保存在內(nèi)存中的,一臺(tái)服務(wù)器可以配置非常大的硬盤(pán),相對(duì)于硬盤(pán)來(lái)說(shuō),服務(wù)器內(nèi)存的配置容量遠(yuǎn)小于配置的硬盤(pán)容量,

所以redis有一定的容量限制,同樣因?yàn)閞edis是保存在內(nèi)存中的,所以服務(wù)器一旦斷電,redis中保存的數(shù)據(jù)很容易丟失。

redis中存放的是常用的,且不經(jīng)常更新的數(shù)據(jù)。

一臺(tái)服務(wù)器剛上線的時(shí)候,用戶訪問(wèn)服務(wù)器上的數(shù)據(jù)的時(shí)候,先去緩存中看看是否有要查詢的數(shù)據(jù)。

如果緩存中保存有用戶需要的數(shù)據(jù),則直接從緩存中獲取需要的數(shù)據(jù);
如果緩存中沒(méi)有用戶需要的數(shù)據(jù),則會(huì)從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù)并返回給用戶,同時(shí)會(huì)把這些數(shù)據(jù)在內(nèi)存中保存一份;
這樣下一位用戶再來(lái)訪問(wèn)同樣的數(shù)據(jù)時(shí),則會(huì)直接從緩存中讀取需要的數(shù)據(jù),而不用訪問(wèn)數(shù)據(jù)庫(kù),加快了用戶的訪問(wèn)速度。

例如,我們?cè)诓┛蛨@發(fā)表一篇博客時(shí),在博客園的首頁(yè)不會(huì)立即出現(xiàn)剛才所發(fā)表的那篇博客,而是要等幾分鐘之后,在博客園的首頁(yè)才會(huì)出現(xiàn)剛才發(fā)表的那篇博客文章,這就是因?yàn)榫彺娴脑颉?/p>

1.準(zhǔn)備工作

為CentOS系統(tǒng)配置好epel源。

2.安裝Redis

[root@bogon yum.repos.d]# yum list | grep redis
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
redis.x86_64                            3.2.10-2.el7                   @epel    
collectd-redis.x86_64                   5.7.1-2.el7                    epel     
collectd-write_redis.x86_64             5.7.1-2.el7                    epel     
hiredis.x86_64                          0.12.1-1.el7                   epel     
hiredis-devel.x86_64                    0.12.1-1.el7                   epel     
opensips-redis.x86_64                   1.10.5-3.el7                   epel     
pcp-pmda-redis.x86_64                   3.11.8-7.el7                   base     
php-nrk-Predis.noarch                   1.0.4-1.el7                    epel     
php-pecl-redis.x86_64                   2.2.8-1.el7                    epel     
php-phpiredis.x86_64                    1.0.0-2.el7                    epel     
python-redis.noarch                     2.10.3-1.el7                   epel     
python-trollius-redis.noarch            0.1.4-2.el7                    epel     
python2-django-redis.noarch             4.3.0-1.el7                    epel     
redis-trib.noarch                       3.2.10-2.el7                   epel     
rubygem-redis.noarch                    3.2.1-2.el7                    epel     
rubygem-redis-doc.noarch                3.2.1-2.el7                    epel     
syslog-ng-redis.x86_64                  3.5.6-3.el7                    epel     
uwsgi-logger-redis.x86_64               2.0.15-1.el7                   epel     
uwsgi-router-redis.x86_64               2.0.15-1.el7                   epel     
[root@bogon yum.repos.d]# yum install -y redis
Loaded plugins: fastestmirror, langpacks
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Loading mirror speeds from cached hostfile
 * epel: ftp.cuhk.edu.hk
Package redis-3.2.10-2.el7.x86_64 already installed and latest version
Nothing to do

3.redis的文件目錄結(jié)構(gòu)

使用rpm -ql命令查看redis安裝之后在系統(tǒng)中生成的文件

[root@bogon ~]# rpm -ql redis
/etc/logrotate.d/redis
/etc/redis-sentinel.conf            # redis的守護(hù)配置文件
/etc/redis.conf                 # redis的配置文件
/etc/systemd/system/redis-sentinel.service.d
/etc/systemd/system/redis-sentinel.service.d/limit.conf
/etc/systemd/system/redis.service.d
/etc/systemd/system/redis.service.d/limit.conf
/usr/bin/redis-benchmark
/usr/bin/redis-check-aof
/usr/bin/redis-check-rdb
/usr/bin/redis-cli                  # redis的交互式命令行界面
/usr/bin/redis-sentinel         # redis的守護(hù)文件
/usr/bin/redis-server           # redis的服務(wù)端啟動(dòng)文件
/usr/lib/systemd/system/redis-sentinel.service  # redis的守護(hù)程序的函數(shù)庫(kù)文件
/usr/lib/systemd/system/redis.service           # redis的函數(shù)庫(kù)文件
/usr/libexec/redis-shutdown     # 停止redis的執(zhí)行文件
/usr/share/doc/redis-3.2.10     # redis的幫助文件
/usr/share/doc/redis-3.2.10/00-RELEASENOTES
/usr/share/doc/redis-3.2.10/BUGS
/usr/share/doc/redis-3.2.10/CONTRIBUTING
/usr/share/doc/redis-3.2.10/MANIFESTO
/usr/share/doc/redis-3.2.10/README.md
/usr/share/licenses/redis-3.2.10            # redis的licenses說(shuō)明
/usr/share/licenses/redis-3.2.10/COPYING
/usr/share/man/man1/redis-benchmark.1.gz    # redis的man文件
/usr/share/man/man1/redis-check-aof.1.gz
/usr/share/man/man1/redis-check-rdb.1.gz
/usr/share/man/man1/redis-cli.1.gz
/usr/share/man/man1/redis-sentinel.1.gz
/usr/share/man/man1/redis-server.1.gz
/usr/share/man/man5/redis-sentinel.conf.5.gz
/usr/share/man/man5/redis.conf.5.gz
/var/lib/redis                          # redis的持久化文件保存路徑
/var/log/redis                          # redis的日志文件
/var/run/redis                          # redis的進(jìn)程PID文件

4.redis的啟動(dòng)停止與狀態(tài)查看

[root@bogon ~]# systemctl status redis.service      # 查看redis的狀態(tài),可以看到是活動(dòng)狀態(tài)
● redis.service - Redis persistent key-value database
 Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
     └─limit.conf
 Active: active (running) since Thu 2017-11-16 17:29:39 CST; 1min 44s ago
Process: 6272 ExecStop=/usr/libexec/redis-shutdown (code=exited, status=0/SUCCESS)
Main PID: 6286 (redis-server)
 CGroup: /system.slice/redis.service
     └─6286 /usr/bin/redis-server 0.0.0.0:6379
Nov 16 17:29:39 bogon systemd[1]: Started Redis persistent key-value database.
Nov 16 17:29:39 bogon systemd[1]: Starting Redis persistent key-value database...
[root@bogon ~]# systemctl stop redis.service      # 停止redis
[root@bogon ~]# systemctl status redis.service      # redis牌非活動(dòng)狀態(tài)
● redis.service - Redis persistent key-value database
 Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
     └─limit.conf
 Active: inactive (dead)
Nov 16 17:21:56 bogon systemd[1]: redis.service: control process exited, code=exited status=1
Nov 16 17:21:56 bogon systemd[1]: Unit redis.service entered failed state.
Nov 16 17:21:56 bogon systemd[1]: redis.service failed.
Nov 16 17:22:04 bogon systemd[1]: Started Redis persistent key-value database.
Nov 16 17:22:04 bogon systemd[1]: Starting Redis persistent key-value database...
Nov 16 17:29:39 bogon systemd[1]: Stopping Redis persistent key-value database...
Nov 16 17:29:39 bogon systemd[1]: Started Redis persistent key-value database.
Nov 16 17:29:39 bogon systemd[1]: Starting Redis persistent key-value database...
Nov 16 17:31:38 bogon systemd[1]: Stopping Redis persistent key-value database...
Nov 16 17:31:38 bogon systemd[1]: Stopped Redis persistent key-value database.
[root@bogon yum.repos.d]# redis-server        # 啟動(dòng)redis程序
5587:C 16 Nov 15:42:56.010 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
5587:M 16 Nov 15:42:56.018 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.2.10 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 6519
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                        
5587:M 16 Nov 15:42:56.022 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
5587:M 16 Nov 15:42:56.022 # Server started, Redis version 3.2.10
5587:M 16 Nov 15:42:56.022 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
5587:M 16 Nov 15:42:56.025 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
5587:M 16 Nov 15:42:56.026 * The server is now ready to accept connections on port 6379
[root@bogon ~]# systemctl status redis.service
● redis.service - Redis persistent key-value database
 Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
     └─limit.conf
 Active: active (running) since Thu 2017-11-16 17:31:47 CST; 2s ago
Main PID: 6325 (redis-server)
 CGroup: /system.slice/redis.service
     └─6325 /usr/bin/redis-server 0.0.0.0:6379
Nov 16 17:31:47 bogon systemd[1]: Started Redis persistent key-value database.
Nov 16 17:31:47 bogon systemd[1]: Starting Redis persistent key-value database...

redis的啟動(dòng)方式有兩種:

[root@bogon ~]# systemctl start redis.service   # 后臺(tái)啟動(dòng),無(wú)歡迎界面
[root@bogon ~]# redis-server            # 前臺(tái)啟動(dòng),可以看到歡迎界面

redis的停止方式有兩種:

[root@bogon ~]# systemctl stop redis.service
[root@bogon ~]# /usr/libexec/redis-shutdown

5.redis的主配置文件說(shuō)明

bind 127.0.0.1                          # redis綁定的主機(jī)地址,這里默認(rèn)僅支持本地連接
protected-mode yes                      # 是否以保護(hù)模式運(yùn)行redis
port 6379                               # 指定redis監(jiān)聽(tīng)的端口
tcp-backlog 511
timeout 0                               # 客戶端閑置多長(zhǎng)時(shí)間后關(guān)閉連接,為0時(shí)關(guān)閉該功能
tcp-keepalive 300                       # tcp方式大允許的連接數(shù)
daemonize no                            # 是否以守護(hù)進(jìn)程方式運(yùn)行
supervised no                           # 不使用監(jiān)控樹(shù)
pidfile /var/run/redis_6379.pid         # redis運(yùn)行時(shí)保存pid的文件
loglevel verbose                        # 日志文件的記錄方式,默認(rèn)為標(biāo)準(zhǔn)輸出
logfile /var/log/redis/redis.log        # redis日志文件的保存路徑
databases 16                            # 系統(tǒng)中保存redis數(shù)據(jù)庫(kù)的數(shù)量
save 900 1                              # redis中900秒之內(nèi)有1次更新操作時(shí),把數(shù)據(jù)同步到文件中保存
save 300 10                             # redis在300秒內(nèi)有10次更新操作時(shí),把數(shù)據(jù)同步到文件中保存
save 60 10000                           # redis在60秒內(nèi)有10000次更新操作時(shí),把數(shù)據(jù)同步到文件中保存
stop-writes-on-bgsave-error yes
rdbcompression yes                      # redis中的數(shù)據(jù)保存到本地?cái)?shù)據(jù)庫(kù)時(shí)是否啟動(dòng)壓縮,默認(rèn)為yes
rdbchecksum yes
dbfilename dump.rdb                     # 本地?cái)?shù)據(jù)庫(kù)的文件名
dir /var/lib/redis                      # 本地?cái)?shù)據(jù)庫(kù)的路徑
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no                           # 是否在每次更新操作時(shí)進(jìn)行日志記錄
appendfilename "appendonly.aof"         # 指定更新日志的文件名
appendfsync everysec                    # 每秒鐘把redis中的數(shù)據(jù)同步到本地文件一次
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60    #
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

6.redis的交互式界面

[root@bogon ~]# redis-cli   # 進(jìn)入redis的交互式界面
127.0.0.1:6379>

可以看到,已經(jīng)進(jìn)入到redis的交互環(huán)境了

127.0.0.1:6379> set k1 v1   # 設(shè)定k1這個(gè)鍵的值為v1
OK
127.0.0.1:6379> get k1      # 獲取k1的值
"v1"    
127.0.0.1:6379> set k2 v2   # 設(shè)定k2的值為v2
OK
127.0.0.1:6379> get k2      # 獲取k2的值
"v2"

7.python3操作redis

在linux系統(tǒng)中打開(kāi)redis的配置文件/etc/redis.conf

把第61行修改為

bind 0.0.0.0

表示所有的主機(jī)都可以連接

然后重啟redis,使配置文件生效

[root@bogon ~]# systemctl restart redis.service

在windows系統(tǒng)中,安裝redis模塊

pip3 install redis

新建redis_test.py文件,文件內(nèi)容為:

import redis
r1=redis.Redis(host="192.168.16.220",port=6379)
print("第一次讀取的k1值:",r1.get("k1"))
print("第一次讀取的k2值:",r1.get("k2"))
r1.set("k3","v3")
r1.delete("k1")
r1.delete("k2")
print("第二次獲取k1的值",r1.get("k1"))
print("第二次獲取k2的值",r1.get("k2"))
print(r1.get("k3"))

運(yùn)行結(jié)果:

第一次讀取的k1值: b'v1'
第一次讀取的k2值: b'v2'
第二次獲取k1的值 None
第二次獲取k2的值 None
b'v3'

再次在linux的命令提示符下獲取k1和k2的值

127.0.0.1:6379> get k1
(nil)
127.0.0.1:6379> get k2
(nil)

因?yàn)閗1和k2的值已經(jīng)在redis_test.py中被刪除了,所以獲取到的值為None.

8.使用Redis的好處

(1) 速度快,因?yàn)閿?shù)據(jù)存在內(nèi)存中,類(lèi)似于HashMap,HashMap的優(yōu)勢(shì)就是查找和操作的時(shí)間復(fù)雜度都是O(1)

(2) 支持豐富數(shù)據(jù)類(lèi)型,支持string,list,set,sorted set,hash

(3) 支持事務(wù),操作都是原子性,所謂的原子性就是對(duì)數(shù)據(jù)的更改要么全部執(zhí)行,要么全部不執(zhí)行

(4) 豐富的特性:可用于緩存,消息,按key設(shè)置過(guò)期時(shí)間,過(guò)期后將會(huì)自動(dòng)刪除

關(guān)于Python操作redis的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

文章題目:Python操作redis的方法-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)源:http://jinyejixie.com/article0/ghioo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、網(wǎng)站維護(hù)、域名注冊(cè)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、定制網(wǎng)站定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
永泰县| 阳西县| 罗源县| 海林市| 桂林市| 竹北市| 吴川市| 东乌| 永济市| 南充市| 富川| 崇文区| 敖汉旗| 宁晋县| 法库县| 花莲县| 留坝县| 临桂县| 绍兴市| 铁岭市| 太保市| 衡阳市| 文成县| 麻栗坡县| 桂林市| 曲周县| 蕲春县| 建宁县| 若尔盖县| 临沭县| 越西县| 鹤庆县| 江源县| 财经| 长沙市| 安庆市| 华亭县| 吴江市| 临武县| 中超| 柳林县|