五大数据类型 - 字符串 - 列表 list - 集合set - 有序集合 - 哈希 hashMap
基础知识
redis默认有16个数据库;默认使用的是第0个。
- 可以使用select num切换
- 查看DB大小 DBSIZE
- 查看所有的key **keys **
- 清空当前数据库 flushdb
- 清空全部的数据库 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的更多相关文章
- Redis 小白指南(二)- 基础命令和五大类型:字符串、散列、列表、集合和有序集合
Redis 小白指南(二)- 基础命令和五大类型:字符串.散列.列表.集合和有序集合 引言 目录 基础命令 字符串类型 散列类型 列表类型 集合类型 有序集合类型 基础命令 1.获得符合规则的键名列表 ...
- Redis 小白指南(二)- 聊聊五大类型:字符串、散列、列表、集合和有序集合
Redis 小白指南(二)- 聊聊五大类型:字符串.散列.列表.集合和有序集合 引言 开篇<Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍>已经介绍了 Redis 的 ...
- 高可用Redis(四):列表,集合与有序集合
1.列表类型 1.1 列表数据结构 左边为key,是字符串类型 右边为value,是一个有序的队列,与python的列表结构相同 可以在Redis中对列表的value进行如下操作 从左边添加元素 从右 ...
- python对redis的常用操作 下 (无序集合,有序集合)
无序集合: 首先介绍增加,删除和获得所有元素的方法.我将会用第二部分来讨论集合的特殊操作: In [136]: x.sadd("challenge", 1,2,3,4,5,6,7, ...
- redis学习(七)——五大数据类型总结:字符串、散列、列表、集合和有序集合
目录 字符串类型(String) 散列类型(Hash) 列表类型(List) 集合类型(Set) 有序集合类型(SortedSet) 其它命令 一.字符串类型(String) 1.介绍: 字符串类型是 ...
- redis 系列9 对象类型(字符串,哈希,列表,集合,有序集合)与数据结构关系
一.概述 在前面章节中,主要了解了 Redis用到的主要数据结构,包括:简单动态字符串.链表(双端链表).字典.跳跃表. 整数集合.压缩列表(后面再了解).Redis没有直接使用这些数据结构来实现键值 ...
- redis有序集合性能 列表、集合、有序集合
https://www.cnblogs.com/pirlo21/p/7120935.html 1.1 列表 列表(list)类型是用来存储多个字符串,元素从左到右组成一个有序的集合.列表中的每个字符串 ...
- 【Redis学习之六】Redis数据类型:集合和有序集合
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 redis-2.8.18 一.集合 Set无序的.去重的元素 ...
- Redis操作集合,有序集合
Set操作,Set集合就是不允许重复的列表 sadd(name,values) 1 # name对应的集合中添加元素 scard(name) 1 获取name对应的集合中元素个数 sdiff(keys ...
- python学习之-- redis模块操作 集合和有序集合
redis 模块操作之 集合set和有序集合zset Set 集合操作,不允许重复的列表sadd(name,value):name对应的集合中添加元素scard(name):获取name对应的集合中元 ...
随机推荐
- 在业务逻辑中,经常会有父组件调用子组件方法的情况,vue2.0 和 vue3.0 的使用中有些不一样,在这里总结下。
在业务逻辑中,经常会有父组件调用子组件方法的情况,vue2.0 和 vue3.0 的使用中有些不一样,在这里总结下. vue2.0 中的使用方法 父组件: <template> <d ...
- kubernetes笔记-2-基本操作
一.kubectl的基本操作 语法: kubectl [command] [type] [name] [flags] 语法说明: command:对资源执行相应操作的子命令,如:get.cre ...
- 更改grub2背景图片
在/etc/grub/default这里面修改东西然后update-grub来间接修改/boot/grub/grub.cfg中的内容 1.将png图片放进/boot/grub/目录下 2.update ...
- 关于python3调用matplotlib中文乱码问题
问题描述 我用来绘制柱形图,横坐标上面的数据, 但是网上大部分说的都是更改横纵坐标标签的乱码问题,而不是横坐标数据乱码问题 解决办法 更改横纵坐标上标签的中文不乱码 import matplotlib ...
- .net如何优雅的使用EFCore
EFCore是微软官方的一款ORM框架,主要是用于实体和数据库对象之间的操作.功能非常强大,在老版本的时候叫做EF,后来.net core问世,EFCore也随之问世. 本文我们将用一个控制台项目Ho ...
- Day31面向对象之魔法方法
Day31面向对象之魔法方法 类的常用魔法方法如下 序号 双下方法 触发条件 1 init 对象添加独有数据的时候自动触发 2 str 对象被执行打印操作的时候自动触发 3 call 对象加括号调用的 ...
- 教你用Python制作BMI计算器
案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用Python相关知识,做一个BMI计算器的案例.你可以通过控制台的提示信息,输入身高和体重,注意单位,系统会自动计算出BMI ...
- 当我们的执行 java -jar xxx.jar 的时候底层到底做了什么?
大家都知道我们常用的 SpringBoot 项目最终在线上运行的时候都是通过启动 java -jar xxx.jar 命令来运行的. 那你有没有想过一个问题,那就是当我们执行 java -jar 命令 ...
- 如何在 .Net 7 中将 Query 绑定到数组
在 .Net 7 中,我们可以通过绑定数组的方式来接收来自查询字符串的参数.这样就不需要再使用逗号分隔的字符串来获取参数了. 代码演示 假设我们需要从 query 上接受多个 id 并返回查询的结果. ...
- python基础23 之初识面向对象
人狗大战 # 编写代码简单实现人打狗 狗咬人的小游戏 """推导步骤1:代码定义出人和狗""" person1 = { 'name': 'j ...