一、简介

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

linux安装redis:https://blog.csdn.net/wangyunzhao007/article/details/105163473

redis优点

1.特别快

Redis 非常快,每秒可执行大约 110000 次的设置(SET)操作,每秒大约可执行 81000 次的读取/获取(GET)操作。

为什么这么快?

简单总结:

  1. 纯内存操作:读取不需要进行磁盘 I/O,所以比传统数据库要快上不少;(但不要有误区说磁盘就一定慢,例如 Kafka 就是使用磁盘顺序读取但仍然较快)

  2. 单线程,无锁竞争:这保证了没有线程的上下文切换,不会因为多线程的一些操作而降低性能;

  3. 多路 I/O 复用模型,非阻塞 I/O:采用多路 I/O 复用技术可以让单个线程高效的处理多个网络连接请求(尽量减少网络 IO 的时间消耗);

  4. 高效的数据结构,加上底层做了大量优化:Redis 对于底层的数据结构和内存占用做了大量的优化,例如不同长度的字符串使用不同的结构体表示,HyperLogLog 的密集型存储结构等等..

2.支持多种数据类型

支持string,list,hash,set,zset等基本类型,还有bitMap,布隆过滤器,hyperloglog,stream等高级数据类型。

3.操作具有原子性

Redis 操作都是原子操作,这确保如果两个客户端并发访问,Redis 服务器能接收更新的值。

4.支持多种工具

有消息队列,发布订阅等。

二、数据结构

1.字符串String

Redis 中的字符串是一种 动态字符串,这意味着使用者可以修改,它的底层实现有点类似于 Java 中的 ArrayList

操作命令实例

set key value     #不管key是否存在,都设置
setnx key value   #key不存在,才设置
set key value xx  #key存在,才设置
get key           #取出key对应的value

测试结果

set命令:key值不存在,将新的key,value存进去;key值已经存在,将新的key值覆盖。

setnx:当key值不存在时,把新的key,value存在去;当key值存在时,不存,还保留之前的数据。

setxx:当key值存在时,将新的值覆盖旧址;当key不存在,不做操作。

此外还要mget ,rmset等命令

还有一些其他有关字符串的操作,如getset、append、strlen、incrbyfloat、getrange、setrange等。

2.字典Hash

Redis 中的字典相当于 Java 中的 HashMap,内部实现也差不多类似,都是通过 "数组 + 链表" 的链地址法来解决部分 哈希冲突,同时这样的结构也吸收了两种不同数据结构的优点。

操作命令实例

插入

key为redis中键值的key,二field是hash中键值的key。

hset key field value              #设置hash表key中的field的值。如果hash表不存在,则创建,并执行设置field的值,如果hash表存在,值field的值覆盖或新增
hash key field value[key value]   #批量设置hash表key的域
hsetnx key field value            #仅仅当field域不存在时,设置hash表field的值

查询

hget key field           #获取哈希表key的field值
hmget key field[field]   #批量获取hash表的filed
hgetall key              #获取hash表的所有域值
hexists key field        #判断hash表中是否存在某个域
hkeys key                #获取hash表的所有域
hvals key                #获取hash表的所有域值

修改

hincrby key field increment  #hash表field域的数值增加步长increment,如果increment是负值,则是递减。如果域不存在,初始值视为0

删除

hdel key field[field]  #删除hash的域,如果指定多个field,则删除多个

其他

hlen key   #获取hash的域数量

3.列表List

Redis 的列表相当于 Java 语言中的 LinkedList,有序,重复,左右两边插入弹出,注意它是链表而不是数组。这意味着 list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n)。

操作命令实例 

插入

lpush和rpush命令

lpush key value1 value2 value3...valuen  #从列表左端插入(1-n)个
rpush key value1 value2 value3...valuen  #从列表右端插入(1-n)个

备注:lrange mylist 0 -1    # -1 表示倒数第一个元素, 这里表示从第一个元素到最后一个元素,即查询集合所有元素

linsert命令

linsert key before value newValue  #在list指定的值前插入新值
linsert key aftervalue newValue    #在list指定的值后插入新值

删除

lpop 命令

lpop key #从列表左侧弹出一个item
rpop key #从列表右侧弹出一个item

lrem命令

lrem key count value
#根据count值,从列表中删除所有和value值相等的项
#count>0,从左向右删除count(不够count个,有多少删除多少)个和value值相等的项
#count<0,从右向左删除count个和value值相等的项
#count=0,删除所有和value值相等的项

 ltrim命令

ltrim key start end  #按照索引范围修剪列表

查询

lrange命令

lrange key start end(包含end) #获取列表指定索引范围所有的item。 end为-1代表是末尾元素,故lrange key 0 -1 是查看所有元素

还有其他的查询就不一一展示了。

修改

lset命令

lset key index newValue #设置列表指定索引值为newValue

4.集合Set

Redis 的集合相当于 Java 语言中的 HashSet,它内部的键值对是无序、唯一的。它的内部实现相当于一个特殊的字典,字典中所有的 value 都是一个值 NULL。

操作命令实例

sadd key value1 value #可以一次添加多个,值不能相同,相同只能插入一个
srem key value  #将集合key中的value移除掉
smembers key #获取到set集合中的所有值
scard key #获取长度
spop key  #弹出一个

5.有序集合SortedSet

类似于 Java 中 SortedSet 和 HashMap 的结合体,一方面它是一个 set,保证了内部 value 的唯一性,另一方面它可以为每个 value 赋予一个 score 值,用来代表排序的权重。它的内部实现用的是一种叫做 「跳跃表」 的数据结构。

操作命令实例

zadd key score value(可以是多个) #添加score和value
zrange key start end            #获取指定索引区间内的升序元素,end写-1代表倒数第一个元素
zrem kye value(可以是多个)       #删除元素
zscore key value                #返回元素的分数
zincrby key increScore value    #增加或减少元素的分数

zset还有一些其他的命令,大家可以试一试

还有一些通用的命令也要知道的:

keys  查询键,还可以模糊查询

dbsize  查询键的个数

del key [key]   删除键值

expire key seconds 设置过期时间

exists key 判断是否存在

type key 存储类型

redis基本数据类型参考博客:https://mp.weixin.qq.com/s/MT1tB2_7f5RuOxKhuEm1vQ

【redis】redis简介及基本数据结构的操作相关推荐

  1. Redis重要文档、数据结构、操作行为

    1. 重要文档 Redis 参考命令 Redis 官方文档 中⽂官⽹查看命令⽂档 2. 数据结构 redis是key-value的数据结构,每条数据都是⼀个键值对 键的类型是字符串 注意:键不能重复 ...

  2. Redis [1] 简介、数据结构、应用场景

    文章目录 Redis [1] 简介.数据结构.应用场景 简介:**Nosql**介绍和**Reidis**介绍 什么是Redis 什么是缓存 面:为什么要用缓存 面:缓存会带来哪些问题? 热点key的 ...

  3. memcpy后数据不对_详解Redis 的 5 种基本数据结构:

    来源:我没有三颗心脏 一.Redis 简介 "Redis is an open source (BSD licensed), in-memory data structure store, ...

  4. 你真的懂Redis的5种基本数据结构吗?

    摘要: 你真的懂Redis的5种基本数据结构吗?这些知识点或许你还需要看看. 本文分享自华为云社区<你真的懂Redis的5种基本数据结构吗?这些知识点或许你还需要看看>,作者:李子捌. 一 ...

  5. 你真的懂Redis的5种基本数据结构吗?这些知识点或许你还需要看看(图文并茂,浅显易懂,建议收藏)

    一.简介 Redis中所有的的数据结构都是通过一个唯一的字符串key来获取相应的value数据. Redis有5种基础数据结构,分别是: string(字符串) list(列表) hash(字典) s ...

  6. redis缓存数据库中zset数据结构底层算法实现原理:ziplist 和 skiplist

    有序集合对象是有序的.与列表使用索引下标作为排序依据不同,有序集合为每个元素设置一个分数(score)作为排序依据. ①.编码 有序集合的编码可以是 ziplist 或者 skiplist. zipl ...

  7. Redis学习笔记(一)---Redis的简介

    前言 Redis的简介: 1.Redis是完全开源免费的,遵守BSD协议.是一个高性能(NOSQL)的key-value数据库. 2.Redis是一个开源的使用ANSI C语言编写,支持网络,可基于内 ...

  8. NOSQL——redis的安装,配置与简单操作

    内容预知 1.缓存的相关知识 1.1 缓存的概念 1.2 系统缓存 1.3 缓存保存位置及分层结构 DNS缓存 应用层缓存 数据层缓存 硬件缓存 2.关系型数据与非关系型数据库 2.1 关系型数据库 ...

  9. Redis的3个高级数据结构

    转载自   Redis的3个高级数据结构 平常接触最多的是5个入门级数据结构:String,Hash,List,Set,Sorted Set,本文介绍3个高级数据结构:Bitmaps,Hyperlog ...

最新文章

  1. micro-job 0.0.2 发布,分布式任务调度框架
  2. 【PAT甲级 排列组合】1093 Count PAT's (25 分) C++ 全部AC
  3. 基于RTMP实现Linux|麒麟操作系统下屏幕|系统声音采集推送
  4. Entity Framework 6 Recipes 2nd Edition(12-1)译 - 当SaveChanges( ) 被调用时执行你的代码...
  5. 跨境电子商务独立站如何找到热门的利基市场
  6. UML图---基本概念
  7. 线程Thread(Java)
  8. pku2406 Power Strings(kmp字符匹配,next数组)
  9. Tomcat安装及配置教程(超详细的图文教程)
  10. iOS MAC抓包工具charles(青花瓷)配置教程
  11. PCB学习笔记——0201 0402 0603 0805 1206焊盘封装尺寸
  12. 知识点滴 - 关于苹果认证MFI
  13. Druid配置——Ingestion Spec(摄取规范)
  14. codemirror 只读模式(vue)
  15. STM32——串口概念及应用
  16. Serializable的含义
  17. E/WindowManager: android.view.WindowLeaked: Activity com.xxx.xxx.xxx has leaked window com.android.i
  18. 初出茅庐的第一篇文章
  19. Lora源码的相关问题(lora_pkt_fwd.c 修改记录)
  20. 千万不要说联通的网络不好……

热门文章

  1. linux sudo命令错误 is not in the sudoers file
  2. linux 系统调用表 sys_call_table 获取方法
  3. 使用sqlmap 绕过防火墙进行注入测试
  4. 编程之美2.10 寻找数组中的最大值和最小值
  5. Linux共享内存编程实例
  6. Linux C编程--进程介绍7--综合应用实例
  7. FreeNas安装、初始化和存储池设置
  8. 设置居中_微信设置个性签名居中,超简单!
  9. php代码注释处理类库,php代码注释
  10. confluence7安全补丁_centos7安装confluence遇到的问题