【redis】redis简介及基本数据结构的操作
一、简介
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)操作。
为什么这么快?
简单总结:
纯内存操作:读取不需要进行磁盘 I/O,所以比传统数据库要快上不少;(但不要有误区说磁盘就一定慢,例如 Kafka 就是使用磁盘顺序读取但仍然较快)
单线程,无锁竞争:这保证了没有线程的上下文切换,不会因为多线程的一些操作而降低性能;
多路 I/O 复用模型,非阻塞 I/O:采用多路 I/O 复用技术可以让单个线程高效的处理多个网络连接请求(尽量减少网络 IO 的时间消耗);
高效的数据结构,加上底层做了大量优化: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简介及基本数据结构的操作相关推荐
- Redis重要文档、数据结构、操作行为
1. 重要文档 Redis 参考命令 Redis 官方文档 中⽂官⽹查看命令⽂档 2. 数据结构 redis是key-value的数据结构,每条数据都是⼀个键值对 键的类型是字符串 注意:键不能重复 ...
- Redis [1] 简介、数据结构、应用场景
文章目录 Redis [1] 简介.数据结构.应用场景 简介:**Nosql**介绍和**Reidis**介绍 什么是Redis 什么是缓存 面:为什么要用缓存 面:缓存会带来哪些问题? 热点key的 ...
- memcpy后数据不对_详解Redis 的 5 种基本数据结构:
来源:我没有三颗心脏 一.Redis 简介 "Redis is an open source (BSD licensed), in-memory data structure store, ...
- 你真的懂Redis的5种基本数据结构吗?
摘要: 你真的懂Redis的5种基本数据结构吗?这些知识点或许你还需要看看. 本文分享自华为云社区<你真的懂Redis的5种基本数据结构吗?这些知识点或许你还需要看看>,作者:李子捌. 一 ...
- 你真的懂Redis的5种基本数据结构吗?这些知识点或许你还需要看看(图文并茂,浅显易懂,建议收藏)
一.简介 Redis中所有的的数据结构都是通过一个唯一的字符串key来获取相应的value数据. Redis有5种基础数据结构,分别是: string(字符串) list(列表) hash(字典) s ...
- redis缓存数据库中zset数据结构底层算法实现原理:ziplist 和 skiplist
有序集合对象是有序的.与列表使用索引下标作为排序依据不同,有序集合为每个元素设置一个分数(score)作为排序依据. ①.编码 有序集合的编码可以是 ziplist 或者 skiplist. zipl ...
- Redis学习笔记(一)---Redis的简介
前言 Redis的简介: 1.Redis是完全开源免费的,遵守BSD协议.是一个高性能(NOSQL)的key-value数据库. 2.Redis是一个开源的使用ANSI C语言编写,支持网络,可基于内 ...
- NOSQL——redis的安装,配置与简单操作
内容预知 1.缓存的相关知识 1.1 缓存的概念 1.2 系统缓存 1.3 缓存保存位置及分层结构 DNS缓存 应用层缓存 数据层缓存 硬件缓存 2.关系型数据与非关系型数据库 2.1 关系型数据库 ...
- Redis的3个高级数据结构
转载自 Redis的3个高级数据结构 平常接触最多的是5个入门级数据结构:String,Hash,List,Set,Sorted Set,本文介绍3个高级数据结构:Bitmaps,Hyperlog ...
最新文章
- micro-job 0.0.2 发布,分布式任务调度框架
- 【PAT甲级 排列组合】1093 Count PAT's (25 分) C++ 全部AC
- 基于RTMP实现Linux|麒麟操作系统下屏幕|系统声音采集推送
- Entity Framework 6 Recipes 2nd Edition(12-1)译 - 当SaveChanges( ) 被调用时执行你的代码...
- 跨境电子商务独立站如何找到热门的利基市场
- UML图---基本概念
- 线程Thread(Java)
- pku2406 Power Strings(kmp字符匹配,next数组)
- Tomcat安装及配置教程(超详细的图文教程)
- iOS MAC抓包工具charles(青花瓷)配置教程
- PCB学习笔记——0201 0402 0603 0805 1206焊盘封装尺寸
- 知识点滴 - 关于苹果认证MFI
- Druid配置——Ingestion Spec(摄取规范)
- codemirror 只读模式(vue)
- STM32——串口概念及应用
- Serializable的含义
- E/WindowManager: android.view.WindowLeaked: Activity com.xxx.xxx.xxx has leaked window com.android.i
- 初出茅庐的第一篇文章
- Lora源码的相关问题(lora_pkt_fwd.c 修改记录)
- 千万不要说联通的网络不好……