資料庫之redis

来源:https://www.cnblogs.com/cz-basic/archive/2018/05/23/9079497.html
-Advertisement-
Play Games

本文說明瞭redis的基本用法,python與redis交互以及與mysql交互使用 ...


啟動redis伺服器:sudo redis-server /etc/redis/redis.conf

通過客戶端進入,執行命令:redis-cli

測試服務是否可用:ping

查看redis當前狀態:ps -ajx|grep redis

停止redis服務:sudo service redis stop或者:redis-cli shutdown

啟動redis服務:sudo service redis start

如果修改配置文件後啟動伺服器:sudo redis-server /etc/redis/redis.conf

重啟redis服務:sudo service redis restart

設置鍵值name,內容是hello world:

   set name "hello world"

設置鍵值及過期時間,以秒為單位:

  setex name 5 "hello world"

設置多個鍵值-mset:

  mset key1 "abc" key2 "edf"

根據多個鍵獲取多個值

  mget key1 key2

設置數字類型的key: set "num" 10

  將key對應的value加1:incr num

  將key對應的value加整數:incrby num 10

  將key對應的value減1:decr num

  將key對應的value減整數:decrby num 10

追加值(append):append num 00,在後面拼接字元串

得到string類型的長度:strlen num

查看所有的鍵:keys *

判斷鍵是否存在,如果存在返回1,不存在返回0:EXISTS num

查看鍵對應的value的類型:type num

刪除鍵及對應的值,刪除成功返回1,失敗返回0: del num

設置和查看過期時間,以秒為單位: EXPIRE num 5  #修改為5秒過期

查看有效時間,以秒為單位:ttl num

hash

設置單個屬性HSET:hset py3 "name" "gj"

設置多個屬性HMSET: hmset py3 "name" "hr" "gender" 0

獲取一個屬性的值 HGET: hget py3 name

獲取多個屬性的值HMGET: hmget py3 "name" "gender"

獲取所有屬性和值HGETALL:hgetall py3

獲取所有的屬性HKEYS:hkeys py3

獲取所有值HVALS: hvals py3

返回包含屬性的個數HLEN: hlen py3

判斷屬性是否存在HEXISTS,存在返回1,不存在返回0: HEXISTS py3 name

刪除屬性及值,不會刪除py3下的其他屬性: hdel py3 name

                    del py3 所有的都刪除

list

在頭部插入數據LPUSH(爬蟲用到這個語句)lpush py5 "abc" "efg"

查看數據  lrange py5 0 -1   ps:py5表示集合,0表示集合開始,-1表示集合結尾

查看類型  type py5

 

在尾部插入數據RPUSH :rpush py5 "haha" "xixi"

在一個元素的前|後插入新元素linsert :

 元素的前插入新元素 linsert py5 after "haha" "hehe"

 元素的後插入新元素 linsert py5 before "haha" "123"

根據下標設置值LSET :lset py5 0  "hello"

          lset py5 -1  "xixihaha"

返回存儲在 key 的列表裡指定範圍內的元素: lrange py5 0 -1

                    lrange py5 2 -1

移除並且返回 key 對應的 list 的第一個元素: lpop py5

移除並返回存於 key 的 list 的最後一個元素: rpop py5

裁剪列表,改為原集合的一個子集 :ltrim py5 2 3

返回存儲在 key 里的list的長度: llen py5

返回列表裡索引對應的元素:lindex py5 0

             lindex py5 3

set 

添加元素--SADD: SADD key member [member ...]

       ps:sadd py6 "abc" "def" "123"

返回key集合所有的元素--SMEMBERS:smembers py6

準備數據:

  sadd py6 defg 123 abc 456

  sadd py7 abc 123 world 456

求多個集合的交集:sinter py6 py7

求某集合與其它集合的差集:sdiff py6 py7

zset

添加--ZADD:ZADD key score member [score member ...]

  ps: zadd py8 3 "you!" 1 "I" 2 "love"

返回指定範圍內的元素--ZRANGE : zrange py8 0 -1

返回元素個數--ZCARD:zcard py8

返回有序集key中,score(權重)值在min和max之間的成員--ZCOUNT :ZCOUNT key min max

  ps:zcount py8 0 1

返回有序集key中,成員member的score值--ZSCORE :ZSCORE key member

  ps:zscore py8 "I"

 

Redis與Python交互

綜合案例:用戶登錄:

需求說明

業務過程如下:

  輸入用戶名、密碼

  密碼加密

  判斷redis中是否記錄了用戶名,如果有則成功

  如果redis中沒有用戶名,則到mysql中查詢

  從mysql中查詢成功後,將用戶名記錄到redis

1、先完成python與redis的交互並且封裝在模塊myredis.py中:

import redis

class RedisHelper():
    def __init__(self,host='192.168.31.21',port=6379):
        self.__redis = redis.StrictRedis(host, port)
    def get(self,key):
        if self.__redis.exists(key):
            return self.__redis.get(key)
        else:
            return ""
    def set(self,key,value):
        self.__redis.set(key,value)

if __name__ == "__main__":

   red = RedisHelper()
   #name是key,hello world是值
   red.set("name","hello world")
   #根據key得到值
   print(red.get("name"))#b'hello world'

2、再完成python與mysql交互並且封裝成模塊mysql.py:

import pymysql
class MysqlHelper(object):
   def __init__(self,host):
      self.host = host
      self.port = 3306
      self.db = "mysql"
      self.user = "xxx" #mysql用戶名
      self.password = "123456" #mysql密碼
      self.charset = "utf8"

   #打開鏈接,返回的對象用conn屬性接收
   def open(self):
      self.conn = pymysql.connect(
         host=self.host,
         port=self.port,
         db=self.db,
         user=self.user,
         password=self.password,
         charset=self.charset
      )
      #得到cursor
      self.cursor = self.conn.cursor()
   #關閉鏈接
   def close(self):
      self.cursor.close()
      self.conn.close()
   #曾刪改
   def cur(self,sql,parms=[]):
      try:
         self.open()
         self.cursor.execute(sql,parms)
         #提交事務
         self.conn.commit()
         self.close()
         print("執行完畢!")
      except Exception as result:
         print(result)

   #得到所以數據
   def get_all(self,sql,parms=[]):
      try:
         self.open()
         self.cursor.execute(sql,parms)
         #返回所以的結果集
         result = self.cursor.fetchall()
         self.close()
         return result
      except Exception as result:
         print(result)

   # 得到一條數據
   def get_one(self, sql, parms=[]):
      try:
         self.open()
         self.cursor.execute(sql, parms)
         result = self.cursor.fetchone()
         self.close()
         return result
      except Exception as result:
         print(result)

   #插入數據
   def insert(self,sql,parms=[]):
      self.__edit(sql,parms)
   #刪除數據
   def delete(self,sql,parms=[]):
      self.__edit(sql,parms)

   #修改數據
   def update(self,sql,parms=[]):
      self.__edit(sql, parms)

   #修改數據
   def __edit(self,sql,parms=[]):
      try:
         self.open()
         count = self.cursor.execute(sql,parms)
         #提交事務
         self.conn.commit()
         self.close()
         print("執行完畢!")
         return count
      except Exception as result:
         print(result)

3、最後實現用戶登錄:

from myredis import RedisHelper
from mysql import MysqlHelper
import hashlib

name = input("請輸入用戶名:")
pwd = input("請輸入密碼:")

sha1=hashlib.sha1()
sha1.update(pwd.encode("utf-8"))
pwd1=sha1.hexdigest()

try:
    redis=RedisHelper()
    if redis.get('uname')==name:
        print('ok')
    else:
        mysql = MysqlHelper('localhost')
        upwd = mysql.get_one('select upwd from userinfos where uname=%s',[name])
        if upwd==None:
            print('用戶名錯誤')
        elif upwd[0]==pwd1:
            redis.set('uname', name)
            print('登錄成功')
        else:
            print("密碼錯誤")
except Exception as e:
    print(e.message)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 簡單介紹 MySQL 的 SELECT INTO OUTFILE 和 LOAD DATA LOCAL INFILE ...
  • “億牛雲爬蟲代理IP”通過固定雲代理服務地址,建立專線網路鏈接,代理平臺自動實現毫秒級代理IP切換,保證了網路穩定性和速度,避免爬蟲客戶在代理IP策略優化上投入精力 獨享高匿家庭ip,支持隧道模式和api提取.高效穩定可測試基於Linux系統研發的平臺,自營線路,電信機房寬頻,私密家庭IP。平臺註冊 ...
  • --創表示例 create table testtab( id int primary key identity(20180,1), -- identity 是自增 (起始值,每次增值) -- primary key 主鍵唯一,且不能為空 name varchar(20), --欄位設置唯一值(un ...
  • SQL語句中生成UUID方法為UUID() 生成帶橫線UUID: select UUID() 形如:abaffaca-fd55-11e5-b3d0-d2c510923c15 生成32位不帶橫線UUID: select replace(UUID​(),'-','') 形如:804a9aa2fd5311 ...
  • Redis詳解 Redis的出現 NoSQL資料庫瞭解 在過去幾年中,NoSQL資料庫一度成為高併發、海量數據存儲解決方案的代名詞,與之相應的產品也如同雨後春筍般出現,然而在眾多產品中,能夠脫穎而出的卻 屈指可數,如Redis、MongoDB、BerkeleyDB和CouchDB等。由於每種產品所擁 ...
  • 前言 本文章主要是總結Linux的基礎操作以及一些簡單的概念~如果不熟悉的同學可下個Linux來玩玩(或者去買一個伺服器玩玩【學生版的不是很貴】),對於開發者來說,能使用Linux做一些基本的操作是必要的! 一、為什麼我們要學習Linux 相信大部分人的PC端都是用Windows系統的,那我們為什麼 ...
  • 好久沒做rac,最近要做架構梳理,這裡針對Oracle常用的名詞縮寫,這裡做個記錄,希望對大家有所幫助。 ...
  • 操作環境:Centos 問 題:The table 'XXX' is full !!! 當碰到此資料庫報錯提示的時候,,, 我,,,有點懵,,, 登錄伺服器查看,,發現 我了個去,,我絕不承認這個伺服器是我搭的,,(手動滑稽X2) MySQL資料庫的位置放到了分區/dev/mapper/centos ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...