基础知识

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. MySQL进阶实战6,缓存表、视图、计数器表

    一.缓存表和汇总表 有时提升性能最好的方法是在同一张表中保存衍生的冗余数据,有时候还需要创建一张完全独立的汇总表或缓存表. 缓存表用来存储那些获取很简单,但速度较慢的数据: 汇总表用来保存使用grou ...

  2. vba 正则表达式用法

    Sub Regexp_test(Sht As String, str As String)On Error Resume NextDim regx As ObjectDim arr, brr, mhS ...

  3. Jmeter 之模块控制器

    模块控制器作用: 模块控制器相当于python中的import 操作,即可以导入本线程组或者其他线程组下的控制器测试片段直接执行. 说明:被导入的测试片段可以是启用.禁用,导入后都将被执行. 字段解释 ...

  4. 【转载】EXCEL VBA Workbook、Worksheet、Range的选择和操作

    Workbooks对象是Microsoft Excel 应用程序中当前打开的所有 Workbook 对象的集合.有close.add.open等方法.   Workbooks.close        ...

  5. [OpenCV实战]12 使用深度学习和OpenCV进行手部关键点检测

    目录 1 背景 2 实现 3 结果和代码 4 参考 手部关键点检测是在手指上找到关节以及在给定图像中找到指尖的过程.它类似于在脸部(面部关键点检测)或身体(人体姿势估计)上找到关键点.但是手部检测不同 ...

  6. Python网络爬虫get方法出现乱码的解决的三种方案

    给大家祭出网络爬虫过程中三种中文乱码的处理方案,希望对大家的学习有所帮助. 方案一 将requests.get().text改为requests.get().content 我们可以看到通过text( ...

  7. python之路47 django路由层配置 虚拟环境

    可视化界面之数据增删改查 针对数据对象主键字段的获取可以使用更加方便的obj.pk获取 在模型类中定义双下str方法可以在数据对象被执行打印操作的时候方便的查看 ''' form表单中能够触发提交动作 ...

  8. 快速排序——C++左闭右开区间实现

    代码 #include<iostream> #include<vector> using namespace std; class Solution { public: //快 ...

  9. Linux基础操作-01

    Linux操作系统 很多IC设计的EDA工具都是在Linux系统中进行运行的,在IC设计的从业者都需要熟练掌握Linux操做.可以不掌握Linux原理,但是操作要熟练. Linux 操作系统的特点 多 ...

  10. 联邦学习(Federated Learning)

    联邦学习的思想概括为:一种无需交换数据(只交换训练中间参数或结果)的分布式机器学习技术,在保护数据隐私的同时实现数据共享,解决数据孤岛问题. 本文仅介绍基本概念,详细请查看文末参考资料. 基本概念 联 ...