Redis简单操作

[TOC]

Redis简介

Redis以键值对的形式储存数据

Redis支持的数据类型有:string、list、set、zset(sorted set)、hash

Redis特点:

  • 响应速度快,数据量小
  • Redis以内存作为数据存储介质,所以读写数据的效率极高

安装

下载地址:

与其他数据库的比较

Redis VS MySQL

  • redis: 内存数据库(读写快)、非关系型(操作数据方便、数据固定)
  • mysql: 硬盘数据库(数据持久化)、关系型(操作数据间关系、可以不同组合)

大量访问的临时数据,才有redis数据库更优

Redis VS Memcache

  • redis: 操作字符串、列表、字典、无序集合、有序集合 ,支持数据持久化(数据丢失可以找回(默认持久化,主动持久化save)、可以将数据同步给mysql) , 高并发支持
  • memcache: 操作字符串 , 不支持数据持久化 , 并发量小

Redis操作

启动服务

1前提:前往一个方便管理redis持久化文件的路径再启动服务:dump.rdb 21)前台启动服务 3>: redis-server 42)后台启动服务 5>: redis-server --service-start 63)配置文件启动服务 7>: redis-server 配置文件的绝对路径 8>: redis-server --service-start 配置文件的绝对路径 9eg>: redis-server --service-start D:/redis/redis.conf

密码管理

  • 提倡在配置文件中配置,采用配置文件启动 requirepass 密码

  • 当服务启动后,并且连入数据库,可以再改当前服务的密码(服务重启,密码重置) config set requirepass 新密码

  • 连入数据库,查看当前服务密码密码 config get requirepass

连接数据库

11)默认连接:-h默认127.0.0.1-p(端口号)默认6379-n(数据库编号)默认0-a(密码)默认无 2>: redis-cli 3 42)完整连接: 5>: redis-cli -h ip地址 -p 端口号 -n 数据库编号 -a 密码 6 73)先连接,后输入密码 8>: redis-cli -h ip地址 -p 端口号 -n 数据库编号 9>: auth 密码

关闭服务

  • 在没有连接进数据库时执行 redis-cli shutdown
  • 连接进数据库后执行 shutdown

数据持久化

  • 配置文件的 默认配置
    • save 900 1 超过900秒有1个键值对操作,会自动调用save完成数据持久化
    • save 300 10 超过300秒有10个键值对操作,会自动调用save完成数据持久化
    • save 60 10000 超过60秒有10000个键值对操作,会自动调用save完成数据持久化
  • 安全机制
    • 当redis服务不可控宕机,会默认调用一下save完成数据持久化
  • 主动持久化
    • save 连入数据库时,主动调用save完成数据持久化
  • 注:数据持久化默认保存文件 dump.rdb,保存路径默认为启动redis服务的当前路径

Redis五种数据类型的操作

string字符串

  • 基本操作

    设置

    set key value (例如: set name reese)

    获取value值

    get key (例如: get name)

    key是唯一的,不能用同一个key,否则会覆盖

    设置多个值

    mset k1 v1 k2 v2 ...

    获取多个值

    mget k1 k2 ...

    给key设置过期时间

    setex key exp value

    将 key 所储存的值加上增量 increment 。

    incrby key increment

  • 查看过期时间

    127.0.0.1:6379> ttl name (integer) -1

    -1代表永久, -2代表不存在

  • 设置过期时间

    给已存在的key设置过期时间

    expire key seconds (例子:expire name 10)

    设置key的同时,设置过期时间

    set key value ex seconds (例如: set name reese ex 20) 或者 setex key seconds value (例如: setex name 20 cwz)

  • 追加

    给已有的value值,添加新的值

    append key value

  • 设置/获取多个

    设置多个string

    mset key value key value ...

    例如: mset user cwz password 123

    获取多个

    mget key key key ...

    例子: mget user password

  • key操作

    查看所有的key值

    keys *

    删除

    del key

    查看key是否存在,存在返回1,不存在返回0

    exists key

    查看key类型

    type key

  • 运算

    set num 1 # 自动识别,字符串里面的整数

    incr num # 加1

    decr num # 减1

    incrby num 50 # 增加多个

    descby num 50 # 减少多个

list列表

栈:先进后出

队列:先进先出

  • 设置

    左添加 栈 先进后出

    127.0.0.1:6379> lpush my_list 1 2 3 4 5 6 (integer) 6

    右添加 队列 先进先出

    rpush my_list 7 8

  • 查看

    查看所有: 127.0.0.1:6379> lrange my_list 0 -1

    1. "6"
    2. "5"
    3. "4"
    4. "3"
    5. "2"
    6. "1"
  • 获得list的元素个数

    llen my_list

  • 查看特定索引位置的元素

    lindex my_list 2

  • 删除

    lpop my_list # 删除左边第一个

    rpop my_list # 删除右边第一个

    lrem my_list 1 5 # 表示从左往右删除1个5

    lrem my_list 0 5 # 表示删除所有的5

    lrem my_list -2 5 # 表示从右往左删除2个5

hash(字典)

是一个string类型的field和value的映射表,特别适合用于存储对象

hash的key必须是唯一的

Key : (field:value)

  • 设置

    hset key field value

    例子:

    hset users name xxx

  • 获取

    hget key field

    例子:

    hget users name

  • 删除

    hdel key field

    例子:

    hdel users name

  • 设置多个

    hmset user name yyy age 19 sex male

  • 获取多个

    hmget user name age sex

  • 获取全部field value

    hgetall user

  • 获取所有的field

    hkeys user

  • 获取所有的value

    hvals user

  • 获取field个数

    hlen key

  • 获取field类型

    type key

set集合

  • 设置

    sadd my_set 1 2 3 4 5 6

  • 获取

    smembers key

  • 删除

    srem指定删除

    srem key members

    spop随即删除

    spop key

  • 移动一个集合的值到另一个集合

    smove oldkey newkey members

    例子: smove my_set1 my_set2 3

  • 判断集合存在某个值

    sismember key value

  • 交集

    sinter key1 key2 ...

    把key1 key2的交集合并到newkey

    sinterstore newkey key1 key2

  • 并集

    sunion key1 key2 ...

    把key1 key2的并集合并到newkey

    sunionstore newkey key1 key2

  • 差集

    sdiff key1 key2 ...

    把key1 key2的差集合并到newkey

    sdiffstore newkey key1 key2

  • 获取集合个数

    scard key

  • 随机返回一个数据

    srandmember key

sorted set 有序集合

  • 设置

    zadd key score member (权,权重,顺序)

    例子: 127.0.0.1:6379> zadd my_zset1 1 1 2 2 3 3 4 4 5 5 6 6

    127.0.0.1:6379> zrange my_zset1 0 -1

    1. "1"
    2. "2"
    3. "3"
    4. "4"
    5. "5"
    6. "6"
  • 查询获取

    zrange 正序

    zrange my_zset1 0 -1

    zrevrange 倒序

    zrevrange my_zset1 0 -1

  • 删除

    zrem my_zset1 2

  • 索引

    zrank 正序

    zrank key member

    zrevrank 反序

    zrevrank key member

  • zcard 查看有序集合元素数

    zcard key

  • zrangebyscore 返回集合中score在给定区间的元素

    zrange my_zset 0 -1 withscores

    zrangebyscore my_zset 2 3 withscores

    返回了score在2~3区间的元素

  • zcount 返回集合中在定区间的数量

    zount key min max

    例子 zount my_zset 2 3

  • zscore 查看score(权重)值

    zscore key member

    例子 zscore my_zset 3

  • zremrangebyrank 删除集合中排名在定区间中的元素

    zrange my_zset 0 -1 withscores

    zrerangebyrank my_zset 1 3

  • zremrangebyscore 删除集合中score在给定区间的元素

    zrange my_zset 0 -1 withscores

    zremrangebyscore my_zset 1 3

python操作Redis

安装 包 pip install redis

直接使用

1import redis 2 3rdb = redis.Redis( 4 host='127.0.0.1', 5 port=6379, 6 db=0, 7 password=None, 8 decode_responses=True 9) 10rdb.set('name', 'reese') 11print(rdb.get('name'))

连接池使用

1import redis 2 3pool = redis.ConnectionPool( 4 host='127.0.0.1', 5 port=6379, 6 db=0, 7 password=None, 8 decode_responses=True 9) 10rdb = redis.Redis(connection_pool=pool) 11 12print(rdb.get('name'))

一些操作:

1rdb.expire('user_name', 20) # 添加过期时间 2 3rdb.ttl('user_name') # 在python中不能查看 4 5rdb.mset(a=1, b=2) # 设置多个 6 7rdb.incr('num',222) # 后面直接加参数为数量,如果不加参数,默认加1 8 9rdb.lrem('list_1', 3, 0) # 要删的数量在后面,删除的元素在前面 10 11rdb.hmset('user', {'name':'neo', 'age':19}) # key单独写出,后面用字典方式添加
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Redis简单操作 - HelloWorld