Redis

什么是Redis

redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,还提供了多个语言的API,操作比较方便

安装redis

    sudo apt-get update
sudo apt-get install redis-server

关系型数据库和非关系数据库的区别

关系型数据库表和表之间存在的关系非关系型数据库不存在表的这种概念,redis是键值对数据库,通过key查找value 所以key是唯一的

查看已安装redis信息

    
ps ajx|grep redis

  

操作Redis

对于操作redis有两种,一种是直接redis-cli ,还有一种就是使用编程语言 例pythonjava等等

以下操作都在Linux系统中操作

redis-cli原生操作redis

  • 启动

    redis-cli 

Redis的基本数据类型

  • string 字符串

  • list 列表

  • hash 哈希

  • set 集合

  • sorted sets 有序集合(zset)

官方学习网站

操作String

  最大能存储512MB数据

  • 设置

    set key value

    set name which

    不能用同一个 key不然就会覆盖 默认设置的过期时间是永久

      • 获取

        get key

        get name
      • 设置键值及过期时间,以秒为单位
      • setex key seconds value

expire key seconds

expire name 20

```
  • key不存在
```
set key value ex seconds

setex key seconds value

```
  • 查看过期时间

    ttl key
    例:
    ttl name
  • 追加

    append key value

    append name love
  • 设置多个

    mset key value  key value..
    例子
    mset username which password 123
  • 获取多个

    mget key key key ...

    mget username password name
key
  • 删除

    del key

    del name
  • 查看所有的key

    keys *
  • 查看key是否存在

    exists key 
  • 查看key类型

    type key
  • 设置过期时间,以秒为单位,创建时没有设置过期时间则一直存在
  • expire key seconds
  • 查看有效时间,以秒为单位
  • TTL key
运算
  • incr key
  • decr key
  • 整数

    incrby key increment
    
  • 整数
    decrby key increment

操作list

  • 设置

    • lpush
左添加
```
lpush key value ```
  • rpush
右添加
```
rpush key value ```
  • 在一个元素的前|后插入新元素
LINSERT key BEFORE|AFTER pivot value

  • 在一个元素的前|后插入新元素
LINSERT key BEFORE|AFTER pivot value
  • 查看

    lrange key start stop
    例 查看所有
    lrange key 0 -1
  • 获得

    list

    的元素个数

    llen key 
  • 查看位于index位置上的元素

    lindex key  index
  • 删除

    • lpop
删除左边第一个
```
lpop key ```
  • rpop
删除右边第一个
```
rpop key ```
  • lrem
删除指定
```
lrem key count value ``` - `count > 0` 从左往右 删除数量为`count`的`value`
- `count = 0` 删除所有的 `value`
- `count < 0` 从右往左 删除数量为`count`的`value`

操作hash

  • 设置

    hset key field value

    hset user username which
  • 获取

    hget key field

    hget user username
  • 删除

    hdel key field

    hdel user username
  • 设置多个

    hmset key field value [field value]
  • 获取多个

    hmget key field field
  • 获取全部

    field value
    hgetall key
    
  • 获取所有的

    field
    hkeys key
  • 获取所有的

    value
    hvals key 
  • 获取

    field

    的个数

    hlen key
  • 其它

    • 判断属性是否存在
    HEXISTS key field
    • 删除属性及值
    HDEL key field [field ...]
    • 返回值的字符串长度
    HSTRLEN key field

操作set

  • 设置

    sadd key value [value]
  • 获取

    smembers key
  • 删除

    • srem

      指定删除

      srem key member
    • spop

      随机删除

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

    smove oldkey newkey member
  • 判断集合存在某个值

    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

操作zset

  • 设置

    zadd key score member
  • 获取

    • zrange
正序
```
zrange key start stop ```
  • zrevrange
倒序
```
zrevrange key start stop ```
  • 删除

    zrem key member
  • 索引

    • zrank
正序
```
zrank key member ``
  • zrevrank
反序
```
zrevrank key member ```
  • 查看有序集合元素数

    zcard key
  • 返回值在min-max之间的

    zcount key min max
    
  • 查看score值

    zscore key member

发布订阅

  • 发布者不是计划发送消息给特定的接收者(订阅者),而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅
  • 订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的
  • 发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑
  • 客户端发到频道的消息,将会被推送到所有订阅此频道的客户端
  • 客户端不需要主动去获取消息,只需要订阅频道,这个频道的内容就会被推送过来

消息的格式

  • 推送消息的格式包含三部分
  • part1:消息类型,包含三种类型
    • subscribe,表示订阅成功
    • unsubscribe,表示取消订阅成功
    • message,表示其它终端发布消息
  • 如果第一部分的值为subscribe,则第二部分是频道,第三部分是现在订阅的频道的数量
  • 如果第一部分的值为unsubscribe,则第二部分是频道,第三部分是现在订阅的频道的数量,如果为0则表示当前没有订阅任何频道,当在Pub/Sub以外状态,客户端可以发出任何redis命令
  • 如果第一部分的值为message,则第二部分是来源频道的名称,第三部分是消息的内容

命令

  • 订阅
SUBSCRIBE 频道名称 [频道名称 ...]
  • 取消订阅
  • 如果不写参数,表示取消所有订阅
UNSUBSCRIBE 频道名称 [频道名称 ...]
  • 发布
PUBLISH 频道 消息

主从配置

  • 一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构
  • 比如,将ip为192.168.1.10的机器作为主服务器,将ip为192.168.1.11的机器作为从服务器
  • 设置主服务器的配置
bind 192.168.1.10
  • 设置从服务器的配置
  • 注意:在slaveof后面写主机ip,再写端口,而且端口必须写
bind 192.168.1.11
slaveof 192.168.1.10 6379
  • 在master和slave分别执行info命令,查看输出信息
  • 在master上写数据
set hello world
  • 在slave上读数据
get hello

设置密码

找到配置文件下的requirepass foobared 修改之后重启服务

redis配置文件路径:etc/redis/redis.conf

Python操作Redis

先安装一个第三方库redis

    pip install redis

连接

导入:

import redis
re = redis.Redis(host="IP地址", port=6379, db=0,password='密码’)

出现以下提示说明需要输入密码:

												

Redis 指令 学习笔记的更多相关文章

  1. Redis:学习笔记-03

    Redis:学习笔记-03 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 7. Redis配置文件 启动 ...

  2. Redis:学习笔记-02

    Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...

  3. Redis in Action : Redis 实战学习笔记

    1 1 1 Redis in Action : Redis  实战学习笔记 1 http://redis.io/ https://github.com/antirez/redis https://ww ...

  4. Redis:学习笔记-04

    Redis:学习笔记-04 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 10. Redis主从复制 1 ...

  5. Redis:学习笔记-01

    Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...

  6. Redis——入门学习笔记

    Redis学习 说到前面:这篇笔记只是我作为一个Redis新手,从0到认知的一个过程.后续会持续深入学习. 学习初衷和计划 学习Redis,因为这是热门技术,必须掌握的技术,别人都会我不会.就这一点就 ...

  7. memcache/redis 缓存学习笔记

    0.redis和memcache的区别 a.redis可以存储除了string之外的对象,如list,hash等 b.服务器宕机以后,redis会把内存的数据持久化到磁盘上,而memcache则不会 ...

  8. 十五分钟介绍 Redis数据结构--学习笔记

    下面是一个对Redis官方文档<A fifteen minute introduction to Redis data types>一文的翻译,如其题目所言,此文目的在于让一个初学者能通过 ...

  9. Linux man 用法小结(Linux指令学习笔记)

    今天买了一本<<Linux命令行与shell脚本编程大全>>,想利用暑假放假的时间系统的学习一下 Linux的shell脚本.今天看了一下书,才发现我之前学习,把Linux s ...

随机推荐

  1. 7I - 数塔

    在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 已经告诉你了,这是个DP的题目 ...

  2. apache启动失败

    1.端口被占用 2.路径及文件夹问题(安装路径的文件夹名称中不能为中文)

  3. selenium+java定位163/126邮箱元素显示定位失败解决

    开始在没有进入iframe时,用任何方法定位163/126邮箱登录页面的元素都不可能定位到,eclipse工作台会显示Unable to locate element:…… 这种情况我遇到了两种原因: ...

  4. 列出cron的下几次运行时间

    static void Main(string[] args) { while(true) { var corn = Console.ReadLine(); var s=getCronSchdule( ...

  5. WebAPI常见的鉴权方法,及其适用范围

    在谈这个问题之前,我们先来说说在WebAPI中保障接口请求合法性的常见办法: API Key + API Secret cookie-session认证 OAuth JWT 当然还有很多其它的,比如 ...

  6. python3 第三十二章 - 标准库概览

    1. 操作系统接口 os 模块提供很多函数与操作系统进行交互︰ >>> import os >>> os.getcwd() # 返回当前的工作目录 'C:\\Pyt ...

  7. Vue+Webpack构建去哪儿APP_一.开发前准备

    一.开发前准备 1.node环境搭建 去node.js官网下载长期支持版本的node,采用全局安装,安装方式自行百度 网址:https://nodejs.org/zh-cn/ 安装后在cmd命令行运行 ...

  8. 55行代码实现Java线程死锁

    死锁是Java多线程的重要概念之一,也经常出现在各大公司的笔试面试之中.那么如何创造出一个简单的死锁情况?请看代码: class Test implements Runnable { boolean ...

  9. oracle分区表的使用和查询

    本文参考了 https://blog.csdn.net/mzglzzc/article/details/46300645 一  创建和使用分区表 1.范围分区(RANGE)范围分区将数据基于范围映射到 ...

  10. Linux---一级/二级目录以及位置目录名/指令

    home目录:普通用户登录进来以后的初始位置(会在home目录下创建一个登录名相同的目录例如  / home / 用户名),如果是超级用户则就是 在根目录 /下的 root目录(也就是 /root) ...