redis数据库

redis数据库

一. 事务

  1. 原子性: 一个事务是不可分割的整体,执行操作时就是一起做,或者一起都不做
  2. 一致性:意思是张三给李四转了100元,李四就必须加100元
  3. 隔离性 意思是写数据是隔离开
  4. 持久性 意思是数据库的改变不能返回,改了就改了

二. 安装redis数据库

yum install redis

三 redis相关的命令

redis-server  #启动redis数据库服务器
redis-server & #启动redis数据库服务器并且让它在后台运行
redis-cli   #进入redis客户端
redis-cli -h 127.18.40.58 -p 6379 -a "123456" 连接到其他redis服务器

四. redis五大数据类型

  • 字符串(string)
set key value   #设置key的值
get key         #获取key的值
mset key1 value1 key2 value2 ... #设置多个key的值
mget key1 key2...                #获取多个key的值
getrange key start end           #返回key中字符串值的子串(切片)
incr key       #将key中的数值加一
decr key       #将key中的数值减一
append key value  #将指定的值追加到key的字符值的后面
  • hash
hset key field value  #将哈希表 key 中的字段 field 的值设为 value 
hget key field        #获取哈希表key中的字段field的值
hgetall key           #获取哈希表key的所有字段和值
hkeys  key            #获取哈希表中所有的key
hvals  key            # 获取哈希表中所有的filed
hdel key field     #删除哈希表key中的field的值
  • list(列表)
lpush   key  value1 value2...         #在列表key头部插入数据 
rpush   key value1 value2...         #在列表key末尾插入数据        
lrange  key start  end            #获取列表key指定范围的元素
rpop key                    #删除列表key最后一个元素
llen  key                       #获取列表key的长度
  • set(集合)

sadd  key member1  member2 member3....   #向集合key添加一个或多个成员
scart  key                           #获取集合key的成员数
spop  key                #移除并返回集合key中的一个随机数
smembers key             #获取列表key的所有的成员
  • sorted set(有序集合)
zadd  key score1 value1 score2 value2 ...  #向有序集合添加一个或多个成员
zadd myzset 1 "one"  2  "two"  3  "three"  #例子

zcard key    #获取有序集合的成员数


五.redis练习题(redis实现登录)

import sys
import pymysql   # 导入mysql接口模块
import redis     # 导入redis接口模块

def con_mysql(sql):  # 连接mysql数据函数
    db = pymysql.Connect(host='localhost',
           user='root',
           passwd='123456',
           db='company',
           port=3306,
           charset='utf8'
) 
    cursor = db.cursor()
    cursor.execute(sql)
    data = cursor.fetchall()
    db.close()
    return data
def con_redis(name,passwd): #连接redis数据库函数
    r = redis.Redis(host='39.108.188.19',port=6379)
    r_name = r.hget('user','name') #获取redis数据库中用户名
    r_passwd = r.hget('user','passwd') # 获取redis数据库中的密码
    r_name = r_name.decode('utf8')  # 转换字符
    r_passwd = r_passwd。decode('utf8') # 转换字符
    # 判断用户输入的用户名和密码是不是和redis数据库的相等
    if name == r_name and passwd == r_passwd:   
        return Ture,'登陆成功'
    else:
        return False,'登录失败'


if __name__ = '__main__’:
    name = sys.argv[1]  #拿到用户输入的用户名
    passwd = sys.argv[2] # 拿到用户输入的密码
    resoult = con_redis(name,passwd) 
    if not result[0]:
        sql = ''' select * from tb_user where user="%s" and passwd="%s" ''' %(name,passwd)
        data = con_mysql(sql)
        if data:
            r = redis.Redis(host='39.108.188.19',port=6379)
            r.hset = ('user','name',name) # 更新redis数据库
            r.hset = ('user','passwd',passwd)#更新redis数据库
            print('刷新redis.登录成功')
         else:
             print('用户名或者密码错误')
     else:
         print('redis中的数据正确',登录成功)

redis的好处

  • 速度快,因为数据保存在内存中
  • 支持丰富的数据类型,支持string,list,set,sorted set,hash
  • 支持事物,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
  • 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后自动删除

mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据

知识介绍:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略:

  • voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
  • volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
  • volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
  • allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
  • allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  • no-enviction(驱逐):禁止驱逐数据

redis最适合的场景

  • 会话缓存(Session Cache)
  • 全页缓存(FPC)
  • 队列
  • 排行榜/计数器
  • 发布/订阅
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值