数据库之redis

启动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)
原文地址:https://www.cnblogs.com/cz-basic/p/9079497.html