基础知识

redis默认有16个数据库;默认使用的是第0个。

  1. 可以使用select num切换
  2. 查看DB大小 DBSIZE
  3. 查看所有的key **keys **
  4. 清空当前数据库 flushdb
  5. 清空全部的数据库 FLUSHALL

为什么是6379?追星

Redis是单线程

明白Redis是很快的,官方表示,Redis是基于内存操作的,CPU不是redis的性能瓶颈,Redis的瓶颈是根据机器的内存和网络带宽,既然可以用单线程来实现,就使用单线程了!所以就使用单线程了!

Redis是c语言写的。官方数据每秒的10万+的QPS,不比Memecache差

Redis为什么单线程还很快?

1.误区:高性能的服务器一定是多线程的

2.误区:多线程(cpu上下文切换)一定比单线程效率高

核心:Redis是将所有的数据全部放在内存中,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文切换:耗时操作!!),对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的,在内存的情况下,这个就是最佳方案。

五大基本数据类型

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库缓存消息中间件MQ。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication)LUA脚本(Lua scripting), LRU驱动事件(LRU eviction)事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

非关系性数据库

  • 结构灵活
  • 访问速度快

基于内存存储,支持key-value形式,底层使用c语言编写的。

基于key-value形式的数据字典,结构非常简单,没有数据表的概念,直接用键值对的形式完成数据的管理,Redis支持5中数据类型。

  • 字符串
  • 列表 list
  • 集合set
  • 有序集合
  • 哈希 hashMap
{

	key:value,

	key:{key:value}

}

字符串

Redis:

基本操作

基本

  • 字符串追加字符 ,如果不存在相当于set key
append key1 hello
  • 显示字符的长度
strlen key1
  • 判断是否存在
EXISTS key1
  • 自增
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
  • 自减
127.0.0.1:6379> decr views
(integer) 1
  • 设置步长的自增
127.0.0.1:6379> incrby views 5
(integer) 6
  • 设置步长的自减
127.0.0.1:6379> decrby views 5
(integer) 1

range

  • 截取部分字符串
127.0.0.1:6379> set key1 hello,kuangshen
OK
127.0.0.1:6379> get key1
"hello,kuangshen"
127.0.0.1:6379> getrange key1 0 5
"hello,"
  • 查看全部的字符串
127.0.0.1:6379> getrange key1 0 -1
"hello,kuangshen"
  • 替换指定位置的字符
127.0.0.1:6379> setrange key1 1 xx
(integer) 15
127.0.0.1:6379> get key1
"hxxlo,kuangshen"

不存在

  • 设置 存在时间
127.0.0.1:6379> setex key2 30 hello
  • 显示时间
127.0.0.1:6379> ttl key2
(integer) 20
  • 如果不存在再设置 分布式锁中常用
setnx key1 redis

批量 原子性的操作,要么一起成功,要么一起失败

  • 批量设置值
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
  • 不存在则批量设置
127.0.0.1:6379> msetnx k4 v4 k1 v1
(integer) 0
127.0.0.1:6379> get key4
(nil)

例子

127.0.0.1:6379> set user:1 {name:hjz,age:3}
OK

改进:

127.0.0.1:6379> mset user:1:name hjz user:1:age 20
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "hjz"
2) "20"

先获取再设置 更新

  • 先获取再设置
127.0.0.1:6379> getset db redis
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongdb
"redis"
127.0.0.1:6379> get db
"mongdb"

CAS 比较再交换

String类型的数据例子:

  • 计数器
  • 统计多单位的数量
  • 对象缓存存储

List

列表--栈--队列--阻塞队列

所有的list命令都是l开头的

  • 添加列表 头部添加
127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
  • 得到对应的列表
127.0.0.1:6379> lrange list 0 2
1) "three"
2) "two"
3) "one"
  • 尾部添加值
127.0.0.1:6379> rpush list four
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "four"

下标 index

五大数据类型 - 字符串 - 列表 list - 集合set - 有序集合 - 哈希 hashMap的更多相关文章

  1. Redis 小白指南(二)- 基础命令和五大类型:字符串、散列、列表、集合和有序集合

    Redis 小白指南(二)- 基础命令和五大类型:字符串.散列.列表.集合和有序集合 引言 目录 基础命令 字符串类型 散列类型 列表类型 集合类型 有序集合类型 基础命令 1.获得符合规则的键名列表 ...

  2. Redis 小白指南(二)- 聊聊五大类型:字符串、散列、列表、集合和有序集合

    Redis 小白指南(二)- 聊聊五大类型:字符串.散列.列表.集合和有序集合 引言 开篇<Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍>已经介绍了 Redis 的 ...

  3. 高可用Redis(四):列表,集合与有序集合

    1.列表类型 1.1 列表数据结构 左边为key,是字符串类型 右边为value,是一个有序的队列,与python的列表结构相同 可以在Redis中对列表的value进行如下操作 从左边添加元素 从右 ...

  4. python对redis的常用操作 下 (无序集合,有序集合)

    无序集合: 首先介绍增加,删除和获得所有元素的方法.我将会用第二部分来讨论集合的特殊操作: In [136]: x.sadd("challenge", 1,2,3,4,5,6,7, ...

  5. redis学习(七)——五大数据类型总结:字符串、散列、列表、集合和有序集合

    目录 字符串类型(String) 散列类型(Hash) 列表类型(List) 集合类型(Set) 有序集合类型(SortedSet) 其它命令 一.字符串类型(String) 1.介绍: 字符串类型是 ...

  6. redis 系列9 对象类型(字符串,哈希,列表,集合,有序集合)与数据结构关系

    一.概述 在前面章节中,主要了解了 Redis用到的主要数据结构,包括:简单动态字符串.链表(双端链表).字典.跳跃表. 整数集合.压缩列表(后面再了解).Redis没有直接使用这些数据结构来实现键值 ...

  7. redis有序集合性能 列表、集合、有序集合

    https://www.cnblogs.com/pirlo21/p/7120935.html 1.1 列表 列表(list)类型是用来存储多个字符串,元素从左到右组成一个有序的集合.列表中的每个字符串 ...

  8. 【Redis学习之六】Redis数据类型:集合和有序集合

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 redis-2.8.18 一.集合 Set无序的.去重的元素 ...

  9. Redis操作集合,有序集合

    Set操作,Set集合就是不允许重复的列表 sadd(name,values) 1 # name对应的集合中添加元素 scard(name) 1 获取name对应的集合中元素个数 sdiff(keys ...

  10. python学习之-- redis模块操作 集合和有序集合

    redis 模块操作之 集合set和有序集合zset Set 集合操作,不允许重复的列表sadd(name,value):name对应的集合中添加元素scard(name):获取name对应的集合中元 ...

随机推荐

  1. 硬核!Apache Hudi Schema演变深度分析与应用

    1.场景需求 在医疗场景下,涉及到的业务库有几十个,可能有上万张表要做实时入湖,其中还有某些库的表结构修改操作是通过业务人员在网页手工实现,自由度较高,导致整体上存在非常多的新增列,删除列,改列名的情 ...

  2. adb版本不同导致一个服务杀死另一个服务

    前言 由于我用安装模拟器进行调试app,需要连接到固定端口, 而开发测试的时候用到eclipse中调用sdk中包含一个版本的adb, 另外Android killer中也包含一个版本的adb, 另外我 ...

  3. JavaEE Day04 MySQL多表&事务

    今日内容 多表查询 事务 DCL用于控制权限和管理用户,DBA完成:SQL中四类DDL  DML  DQL  DCL 一.多表查询 1.多表查询_概述 1.1 查询语法     select      ...

  4. 【Java SE进阶】Day01 Object类、日期时间类、System类、StringBuilder类、包装类

    一.Object类 1.概述:Java语言的根类/超类,默认继承自Object类 2.常用方法 toString():返回对象的字符串表示--对象类型@内存地址值 可以对其重写@Override eq ...

  5. python 中文分词工具

    python 中文分词工具 jieba,https://github.com/fxsjy/jieba jieba_fast,https://github.com/deepcs233/jieba_fas ...

  6. jupyter 数据显示设置

    #设置显示行数pd.set_option('display.max_row',None)#设置显示列数pd.set_option('display.max_column',None)#设置显示宽度pd ...

  7. 网络基础与osi七层与TCP/IP协议

     一 什么是网络 网络:计算机网络是一组计算机或网络设备通过有形 的线缆或无形的媒介如无线,连接起来,按照一定的 规则,进行通信的集合. 通信,是指人与人.人与物.物与物之间通过某种媒 介和行为进行的 ...

  8. python基础语法&数据类型&运算符

    1.标识符 # -*- coding:utf-8 -*- # @Time :2021/1/16 10:28 # @Author :QAbujiaban # @Email :wbxztoo@163.co ...

  9. 数据结构 传统链表实现与Linux内核链表

    头文件: #pragma once #include<stdlib.h> //链表结点 struct LinkNode{ void *data; struct LinkNode *next ...

  10. [编程基础] Python lambda函数总结

    Python lambda函数教程展示了如何在Python中创建匿名函数.Python中的匿名函数是使用lambda关键字创建的. 文章目录 1 介绍 1.1 简单使用 1.2 Python lamb ...