Redis简单操作

Stella981
• 阅读 746

[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操作

启动服务

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

密码管理

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

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

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

连接数据库

1)默认连接:-h默认127.0.0.1,-p(端口号)默认6379,-n(数据库编号)默认0,-a(密码)默认无
>: redis-cli

2)完整连接:
>: redis-cli -h ip地址 -p 端口号 -n 数据库编号 -a 密码

3)先连接,后输入密码
>: redis-cli -h ip地址 -p 端口号 -n 数据库编号
>: 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

直接使用

import redis

rdb = redis.Redis(
    host='127.0.0.1',
    port=6379,
    db=0,
    password=None,
    decode_responses=True
)
rdb.set('name', 'reese')
print(rdb.get('name'))

连接池使用

import redis

pool = redis.ConnectionPool(
    host='127.0.0.1',
    port=6379,
    db=0,
    password=None,
    decode_responses=True
)
rdb = redis.Redis(connection_pool=pool)

print(rdb.get('name'))

一些操作:

rdb.expire('user_name', 20)  # 添加过期时间

rdb.ttl('user_name') # 在python中不能查看

rdb.mset(a=1, b=2)   # 设置多个

rdb.incr('num',222)  # 后面直接加参数为数量,如果不加参数,默认加1

rdb.lrem('list_1', 3, 0) # 要删的数量在后面,删除的元素在前面

rdb.hmset('user', {'name':'neo', 'age':19}) # key单独写出,后面用字典方式添加
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
NoSQL数据库Redis和MongoDB
redis简介一些特点:Redis的读写性能极高,并且有丰富的特性(发布/订阅、事务、通知等)。Redis支持数据的持久化(RDB和AOF两种方式),可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis支持多种数据类型,包括:string、hash、list、set,zset、bitm
Stella981 Stella981
3年前
Nginx + lua +[memcached,redis]
精品案例1、Nginxluamemcached,redis实现网站灰度发布2、分库分表/基于Leaf组件实现的全球唯一ID(非UUID)3、Redis独立数据监控,实现订单超时操作/MQ死信操作SelectPollEpollReactor模型4、分布式任务调试Quartz应用
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这