redis——NoSQL的一种

为了解决高并发、高可用、高扩展、大数据存储等一系列问题而产生的数据库解决方案,就是NoSQL

  • NoSQL,非关系型数据库,全名:Not Only Sql,它不能代替关系型数据库,只能作为关系型数据库的一个良好补充。

redis 简介

是使用c语言开发的一个高性能键值数据库,redis可以通过一些键值类型来存储数据。

redis 数据类型

  • String:字符串类型
  • map:散列类型
  • list:列表类型
  • set:集合类型
  • sortedset:有序集合类型

redis的安装

方法一:

  • 点击运行Redis-x64-3.2.100.msi,正常安装。
  • 解压redis-5.0.3.tar.gz文件,将其中的内容都拷贝到安装目录下

方法二:

  • 把redis-5.0.3.tar.gz解压到redis文件夹。
  • 解压Redis-x64-3.2.100.zip文件,将其中内容都拷贝到上一步的redis文件夹中
  • 将redis文件夹放到自己的安装目录

redis 启动

服务端启动

  • 通过cmd终端命令,进入redis文件夹
  • 执行命令:
    • redis-server.exe redis.windows.conf
    • 或redis-server.exe redis.conf

客户端启动

  • 通过cmd终端命令,进入redis文件夹
  • 执行命令:redis-cli.exe
  • 带参数命令:redis-cli -h 主机名 -p 端口号(默认6379) -a 密码 -n 0(指定几号数据库,默认0号数据库)

redis 常用命令

  • 服务端启动:redis-server.exe redis.windows.conf

  • 客户端启动:redis-cli.exe

  • 赋值命令

    • 语法:set key value

    • 示例:

      127.0.0.1:6379> set test 1234
      OK
  • 取值命令

    • 语法:get key

    • 示例:

      127.0.0.1:6379> set test 1234
      OK
  • 取值并赋值

    • 语法:getset key value

    • 示例:

      127.0.0.1:6379> getset test 222
      "1234"
      127.0.0.1:6379> get test
      "222"
  • 设置多个键值对

    • 语法:mset key1 value1 key2 value2 key3 value3

    • 示例:

      127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
      OK
  • 获取多个键值对

    • 语法:mget key1 key2 key3

    • 示例:

      127.0.0.1:6379> mget k1 k3
      1) "v1"
      2) "v3"
  • 删除数据

    • 语法:del key

    • 示例:

      127.0.0.1:6379> del test
      (integer) 1
  • 数值增减

    • 作用:当存储的字符串是整数时,redis提供了一个使用的命令incr,其作用是让当前的键值递增,并返回递增后的值

    • 语法1_增加1:incr key

    • 示例1:

      127.0.0.1:6379> set k4 2
      OK
      127.0.0.1:6379> incr k4
      (integer) 3
      127.0.0.1:6379> get k4
      "3"
      127.0.0.1:6379>
    • 语法2_增加increment:incrby key increment

    • 示例2:

      127.0.0.1:6379> incrby k4 3
      (integer) 6
    • 语法3_减少1:decr key

    • 语法4_减少increment:decrby key increment

  • 向尾部追加值

    • 语法:append key value
    • 作用:向键值的尾部追加value,如果键值不存在,则将该键的值设置为当前value,相当于set key value。返回的是追加后字符串的长度。
  • 获取字符串长度

    • 语法:strlen str
    • 作用:返回键值的长度,如果键不存在则返回0
  • 主键自增

    • 商品编号、订单号采用string的递增数字特性生成
    • 示例:
      • 定义商品编号:key:items:id
      • 自增:incr items:id
  • 把java对象保存到redis中

    • 假设有User对象以JSON序列化的形式存储到redis中,User对象有id,username,password,age,name等属性,存储过程为:User对象--->json(string)--->redis
    • 如果在业务上只是更新age属性,其他属性不做更新,应该使用hash方式解决该问题。
  • hset命令:不区分插入和更新操作,执行插入操作时hset命令返回1,执行更新时返回0;

    • 语法:hset key field value
    • 示例:
    	127.0.0.1:6379> hset user username zs
    (integer) 1
    127.0.0.1:6379> hset user username ls
    (integer) 0
    • 一次设置多个字段值
    • 语法:hmset key field1 value1 field2 value2
  • hsetnx命令:当字段不存在时赋值,类似于hset,区别在于如果字段存在,不执行任何操作。

    • 语法:hsetnx key field value

    • 如果user中没有age字段,则设置age值为value,否则不做任何操作

    • 示例:

      127.0.0.1:6379> hsetnx user sex 1
      (integer) 1
      127.0.0.1:6379> hsetnx user age 30
      (integer) 0
      127.0.0.1:6379> hget user age
      "23"
  • 获取一个字段的值

    • 语法:hget key field
  • 获取一个字段的值

    • 语法:hmget key field1 field2
  • 一次获取对象的所有字段

    • hgetall key
  • 删除字段

    • 可以删除一个或多个字段,返回值是被删除字段的个数
    • hdel key field1 field2 ...
  • 判断字段是否存在

    • 语法:hexists key field

    • 作用:若存在,返回"1",反之返回"0"

    • 示例:

      127.0.0.1:6379> hexists user age
      (integer) 0
      127.0.0.1:6379> hexists user username
      (integer) 1
  • 只获取字段名或字段值

    • 字段名语法:hkeys key

    • 示例:

      127.0.0.1:6379> hkeys user
      1) "username"
    • 字段值语法:hvals key

    • 示例:

      127.0.0.1:6379> hget user username
      "fdfs"
  • 查看一个key中的字段数量

    • 语法:hlen key
  • hash方式存储的完整示例:存储商品信息

    • 商品字段:【商品id,商品名称,商品描述,商品库存,商品评价】
    • 定义商品信息key
      • 语法:hmset items:主键值 key1 value1 key2 value2
      • 代码:hmset items:1001 id 3 name apple price 999.99
    • 获取部分商品信息
      • 语法:hget items:主键值 key1 key2
      • 代码:hget items:1001 id name
    • 获取全部商品信息
      • 语法:hgetall items:主键值
      • 代码:hgetall items:1001
  • 向链表两端增加元素

    • 向列表左边增加元素(最后添加的元素在最上边)

      • 语法:LPUSH list:key v1 v2 v3
    • 向列表右边增加元素(最后添加的元素在最下边)

      • 语法:RPUSH list:key v1 v2 v3
    • 示例:

      127.0.0.1:6379> lpush list:1 2 3 4 5
      (integer) 4
      127.0.0.1:6379> lpush list:2 2 3 4 5
      (integer) 4
      127.0.0.1:6379> rpush list:3 2 3 4 5
      (integer) 4
  • 查看列表:

    • 语法:lrange key start stop

    • 作用:LRANGE命令是列表类型最常用的命令之一,获取列表中的某一片段,key为'list:链表名',返回start、stop之间的所有元素(报刊两端元素),索引从0开始,所以也可以是负数。例如:“-1”代表最后边的一个元素,"-2"代表倒数第二的元素

    • 示例:

      127.0.0.1:6379> lrange list:1 0 2
      1) "5"
      2) "4"
      3) "3"
      127.0.0.1:6379> lrange list:2 1 2
      1) "4"
      2) "3"
      127.0.0.1:6379> lrange list:1 0 -1
      1) "5"
      2) "4"
      3) "3"
      4) "2"
  • 从列表两端弹出元素

    • 从左侧弹出:

      • 语法:lpop key
      • 作用:lpop命令是从左侧弹出一个元素,将列表左侧的元素移除并返回被移除的元素值。
    • 从右侧弹出:

      • 语法:rpop key
      • 作用:rpop命令是从右侧弹出一个元素,将列表右侧的元素移除并返回被移除的元素值。
    • 示例:

      127.0.0.1:6379> lpop list:1
      "5"
      127.0.0.1:6379> rpop list:1
      "2"
      127.0.0.1:6379>
  • 获取列表中元素个数

    • 语法:llen key

    • 示例:

      127.0.0.1:6379> llen list:1
      (integer) 2
  • 删除列表中指定的值

    • 语法:

      • LREM key count value (注意:没有RREM命令)
    • 作用:LREM命令会删除列表中前count个值为value的元素,返回实际删除元素个数。根据count值得不同,该命令执行的方式也会有所不同:

      • 当count>0时,LREM会从列表左侧开始删除(根据count值进行元素删除)
      • 当count=0时,LREM删除列表中所有符合条件的元素
      • 当count<0时,LREM会从列表右边(后边)开始删除(根据count值进行元素删除)
    • 示例:创建一个带重复元素的列表c,删除其中两个字母c,查看剩余的元素

      127.0.0.1:6379> lpush list:c a b c d d b c b s d c
      (integer) 11
      127.0.0.1:6379> lrem list:c 2 c
      (integer) 2
      127.0.0.1:6379> lrange list:c 0 -1
      1) "d"
      2) "s"
      3) "b"
      4) "b"
      5) "d"
      6) "d"
      7) "c"
      8) "b"
      9) "a"
  • 查看列表下标对应的元素值

    • 语法:LINDEX key value

    • 示例:

      127.0.0.1:6379> lindex list:c 3
      "b"
  • 在集合set中添加、删除元素

    • 添加语法:sadd key member ..

    • 删除语法:srem key member ..

    • 示例:

      127.0.0.1:6379> sadd set:a a b c
      (integer) 3
      127.0.0.1:6379> sadd set:a a
      (integer) 0
      127.0.0.1:6379> srem set:a b
      (integer) 1
  • 查询集合中的所有元素

    • 语法:smembers key

    • 示例:

      127.0.0.1:6379> smembers set:a
      1) "b"
      2) "a"
      3) "c"
  • 判断集合中是否存在

    • sismember key member

    • 若存在返回“1”,不存在返回“0”

    • 示例:

      127.0.0.1:6379> sismember set:a b
      (integer) 1
  • 集合的差集运算(A-B=属于A不属于B的集合)

    • 语法:sdiff key key ...

    • 示例:

      127.0.0.1:6379> sadd setA 1 2 3 4 5
      (integer) 5
      127.0.0.1:6379> sadd setB 3 4 5 6 7
      (integer) 5
      127.0.0.1:6379> sdiff setA setB
      1) "1"
      2) "2"
      127.0.0.1:6379> sadd setC 4 5 6 7 8
      (integer) 5
      127.0.0.1:6379> sdiff setC setB set A
      1) "8"
  • 集合的交集运算(属于A且属于B的元素的集合)

    • 语法:sinter key key ...

    • 示例:

      127.0.0.1:6379> sinter setA setB
      1) "3"
      2) "4"
      3) "5"
  • 集合的并集运算(属于A或属于B的元素的集合)

    • 语法:sunion key key ...

    • 示例:

      127.0.0.1:6379> sunion setA setC
      1) "1"
      2) "2"
      3) "3"
      4) "4"
      5) "5"
      6) "6"
      7) "7"
      8) "8"

其他知识点

java中和redis中列表存储方式对比

  • 在java中ArrayList和LinkedList的区别:

    • ArrayList是使用数组来存储数据,特点是:查询块、增删慢
    • LinkedList是使用双向链表存储数据,特点是:增删块,查询慢。如果查询的是链表两端的数据也比较块。
  • 在redis中:
    • list是采用链表存储的,所以对于redis的list数据类型的操作,是操作list的两端数据进行的。

集合类型set和列表类型list的区别:

  • 集合类型set:无序、不可重复
  • 列表类型list:有序、可重复

redis学习笔记01 — 基本介绍、安装配置及常用命令的更多相关文章

  1. (Linux环境Kafka集群安装配置及常用命令

    Linux环境Kafka集群安装配置及常用命令 Kafka 消息队列内部实现原理 Kafka架构 一.下载Kafka安装包 二.Kafka安装包的解压 三.设置环境变量 四.配置kafka文件 4.1 ...

  2. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

  3. Redis学习笔记1-Redis的介绍和认识

    说明:文章内容来自百度百科和redis官方对redis的介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API ...

  4. MongoDB入门学习笔记之简介与安装配置

    一.MongoDB简介 1.文档数据库 MongoDB是一款开源的文档型非关系数据库,具有高性能.高可靠性和自动扩展等特点.MongoDB中的每一条记录是一个文档,其数据存储结构为键/值对,类似JSO ...

  5. Hive学习笔记(二)—— 安装配置

    Hive安装配置及基本操作 1. Hive安装及配置 (1). 上传文件到Hadoop102节点,解压到/opt/moudle (2). 修改/opt/module/hive/conf目录下的hive ...

  6. Java学习系列(一)Java的运行机制、JDK的安装配置及常用命令详解

    俗话说:“十五的月亮十六圆”.那学习是不是也是如此呢?如果把月亮看成是我们的愿望,那十五便是我们所处的“高原期”,坚持迈过这个坎,我相信你的愿望终究会现实的.记得马云曾说:今天很残酷,明天更残酷,后天 ...

  7. Docker学习--->>Docker的认识,安装,及常用命令熟悉

    Docker是什么? 在平常的软件开发中,会面临着开发不同的程序或服务需要不同的环境.而在该环境上开发完成后,想要在其他的环境上部署,则需要自己去重新部署,而Docker的出现使得这样的迁移变得容易. ...

  8. saltstack安装配置及常用命令

    1.salt安装及配置详解 https://www.cnblogs.com/lgeng/p/6567424.html centos7配置: https://www.jianshu.com/p/4c91 ...

  9. Mysql学习(慕课学习笔记1)启动、登录及常用命令

    Mysql学习 启动数据库服务 net start mysql    (不能加分号!!!!) 关闭数据库服务 net stop mysql 登录数据库 mysql -uroot -p -P3306 - ...

随机推荐

  1. uva_answers

    uva202: https://blog.csdn.net/lecholin/article/details/70163148 uva1589: https://blog.csdn.net/qq_42 ...

  2. django框架使用mysql报错,及两种解决方法

    1.django框架 settings.py文件中部分代码: DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3' ...

  3. 把JavaScript对象转化成JSON对象

    js => jsonvar jsonVar = {key: value}var jsonString = JSON.stringify(jsonVar)  //将JS对象转换为JSON字符串va ...

  4. this 指向详细解析(箭头函数)

    前言 this 指向问题是入坑前端必须了解知识点,现在迎来了ES6时代,因为箭头函数的出现,所以感觉有必要对 this 问题梳理一下,遂有此文 在非箭头函数下, this 指向调用其所在函数的对象,而 ...

  5. 【机器学习_11】基础算法:KNN

    一.概述 1.方向 2.一句话概述 3.优缺点 4.应用场景举例 二.理论 三.案例理解

  6. MapReduce时mapping内存不足

    17/11/07 16:53:50 INFO mapreduce.Job: Job job_1510042506570_0007 failed with state KILLED due to: MA ...

  7. Eclipse Tomcat部署web项目时出现There are no resources that can be added or removed from the server解决办法

    问题原因是:tomcat版本和java版本不匹配.

  8. Jmeter分布式部署- linux

    https://www.cnblogs.com/beginner-boy/p/7836276.html https://www.cnblogs.com/wuhenyan/p/6419368.html ...

  9. 用原生js简单模仿angular的依赖注入

    大家都知道angular 依赖注入很神奇,跟我们平常写代码的风格思维差别很大,不过仔细分析确是一个很有意思的东西,依赖注入早期也叫依赖倒置,是java中有的.废话不多少直接上例子 本帖属于原创,转载请 ...

  10. @PostConstruct注解小结

    1.在具体Bean的实例化过程中,@PostConstruct注解的方法,会在构造方法之后,init方法之前进行调用2.在项目中@PostConstruct主要应用场景是在初始化Servlet时加载一 ...