一、Redis支持数据类型简介

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

二、String类型

  1. String类型是Redis最基本的数据类型,String存储是以Key-Value的形式存储的
  2. string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
  3. string类型是Redis最基本的数据类型,一个键最大能存储512MB。

1、GET和SET命令:

#set   <key> <value>添加键值对,get   <key>询对应键值
127.0.0.1:6379> set k "www.baidu.com" #将www.baidu.com存储到k值
OK
127.0.0.1:6379> get k #查看key值对应的值
"www.baidu.com"
127.0.0.1:6379>

2、key命令(查看所有的key值):

127.0.0.1:6379> keys *     #查看所有的key值
1) "age"
2) "k"
3) "name"
127.0.0.1:6379>

3、exists命令(判断某个key是否存在):

#语法:exists key                    #判断key值是否存在,存在返回1,不存在返回0。
127.0.0.1:6379> keys * #查看所有的key值
1) "age"
2) "k"
3) "name"
127.0.0.1:6379> exists age #判断key值为age是否存在,存在返回1,
(integer) 1
127.0.0.1:6379> exists www #判断key值为www是否存在,不存在返回0
(integer) 0
127.0.0.1:6379>

4、append 将给定的value追加到原值的末尾(类似java里面String的append方法)

#语法 append  <key><value>
127.0.0.1:6379> keys * #查看当前库的所有key值
1) "age"
2) "k"
3) "name"
127.0.0.1:6379> get name #获取key为name的value值。
"zhangsan"
127.0.0.1:6379> append name " is my friend" #在zhangsan后面追加 is my friend
(integer) 21
127.0.0.1:6379> get name #再次获取key为name的value值
"zhangsan is my friend"
127.0.0.1:6379>

5、strlen 获得key对应值的长度

127.0.0.1:6379> keys *				#获取所有的key值
1) "age"
2) "k"
3) "name"
127.0.0.1:6379> get name
"zhangsan is my friend"
127.0.0.1:6379> strlen name #查看name对应的value的长度,即value值的长度
(integer) 21
127.0.0.1:6379>

6、setnx <key> <value>只有在 key 不存在时 设置 key 的值

#语法:etnx  <key><value>    只有在 key 不存在时    设置 key 的值
127.0.0.1:6379> keys *
1) "age"
2) "k"
3) "name"
127.0.0.1:6379> get k
"www.baidu.com"
127.0.0.1:6379> setnx k "lisi" #先判断是否存在K,存在返回0,不修改value值
(integer) 0
127.0.0.1:6379> setnx k1 "lisi" #判断是否存在k1,不存在返回1,修改value值为 "lisi"
(integer) 1
127.0.0.1:6379> keys * #查看所有的key,新创建一个k1
1) "age"
2) "k"
3) "k1"
4) "name"
127.0.0.1:6379> get k1 #获取k1的值,验证
"lisi"
127.0.0.1:6379>

7、incr <key> 将 key 中储存的数字值增1 只能对数字值操作,如果为空,新增值为1

127.0.0.1:6379> keys *                    #当前数据库为空
(empty array)
127.0.0.1:6379> set age 12 #存值
OK
127.0.0.1:6379> incr age #让age加一
(integer) 13 #看到返回结果为13
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> incr name #创建一个新的key值为name,并且value值为1
(integer) 1
127.0.0.1:6379>

原子操作:对incr <key>实行原子性操作。

所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。

(1)在单线程中, 能够在单条指令中完成的操作都可以认为是"原子操作",因为中断只能发生于指令之间。

(2)在多线程中,不能被其它进程(线程)打断的操作就叫原子操作。

原子操作主要得益于redis的单线程。

    8、incr <key> 将 key 中储存的数字值减1 只能对数字值操作,如果为空,新增值为-1

127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> get age
"13"
127.0.0.1:6379> decr age #年龄减一
(integer) 12
127.0.0.1:6379> decr name #创建一个新的key值为name,并且value值为-1
(integer) -1
127.0.0.1:6379>

9、incrby <key> <步长> 将 key中存储的数字值增加指定的步长

127.0.0.1:6379> set views 1              #新增一个String
OK
127.0.0.1:6379> incrby views 10 #在原来的基础上增加10
(integer) 11
127.0.0.1:6379> get views
"11"
127.0.0.1:6379> incrby test 10 #若不存在test,新建test,初始值为0加上步长10
(integer) 10
127.0.0.1:6379> get test
"10"
127.0.0.1:6379>

10、decrby <key> <步长> 将 key中存储的数字值减少指定的步长

127.0.0.1:6379> keys *
1) "views"
2) "test"
127.0.0.1:6379> get views
"11"
127.0.0.1:6379> decrby views 10 #在原来的基础上减少10
(integer) 1
127.0.0.1:6379> decrby ww 10 #初始默认为0,减少10
(integer) -10
127.0.0.1:6379>

11、Mset 命令用于同时设置一个或多个 key-value 对。

127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4 #进行设置多个值
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k4"
3) "k3"
4) "k1"
127.0.0.1:6379>

12、Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。

127.0.0.1:6379> keys *
1) "k2"
2) "k4"
3) "k3"
4) "k1"
127.0.0.1:6379> mget k1 k2 k6 #k6不存在,返回null
1) "v1"
2) "v2"
3) (nil)
127.0.0.1:6379>

13、Getrange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。

127.0.0.1:6379> set name "hello,redis world"        #设置字符串
OK
127.0.0.1:6379> get name
"hello,redis world"
127.0.0.1:6379> getrange name 0 5 #截取范围0-5的字符串
"hello,"
127.0.0.1:6379> getrange name 0 -1 #查看字符串,相当于get <key>
"hello,redis world"
127.0.0.1:6379>

14、Setrange 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始到结束。

127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"hello,redis world"
127.0.0.1:6379> setrange name 12 study #覆盖偏移量之后所有字符串
(integer) 18
127.0.0.1:6379> get name
"hello,redis studyd"
127.0.0.1:6379>

15、命令用于设置指定 key 的值,并返回 key 旧的值。

127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> getset name lisi #获取原来的值,并将新的值存入当前key对应的value。
"zhangsan"
127.0.0.1:6379> get name
"lisi"
127.0.0.1:6379>

5、Redis五大基本数据类型——String类型的更多相关文章

  1. ***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象

    http://redis.readthedocs.org/en/latest/hash/hset.html HSET HSET key field value   (存一个对象的时候key存) 将哈希 ...

  2. Redis hash 是一个 string 类型的 field 和 value 的映射表.它的添加、删除操作都是 O(1)(平均)。

    2.3 hashes 类型及操作 Redis hash 是一个 string 类型的 field 和 value 的映射表.它的添加.删除操作都是 O(1)(平均).hash 特别适合用于存储对象.相 ...

  3. redis中关于使用string类型还是hash类型

    前篇:最近在做一个将redis中大数据量进行合并缩减优化的工作,其中一项按月将数据进行合并.将一个月的数据放入一个key-value键值对中. 例:p2d20180901-3.p2d20180902- ...

  4. JS基础_数据类型-String类型

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  5. redis 模拟jedis 操作string类型数据

    一.思路分析 redis数据传输遵循resp协议,只需要按照resp协议并通过socket传递数据到redis服务器即可 resp数据格式: 二.具体实现 package com.ahd.jedis; ...

  6. laravel-- 在laravel操作redis数据库的数据类型(string、哈希、无序集合、list链表、有序集合)

    安装redis和连接redis数据库 在controller头部引入 一.基本使用 public function RedisdDbOne() { // 清空Redis数据库 Redis::flush ...

  7. Redis和nosql简介,api调用;Redis数据功能(String类型的数据处理);List数据结构(及Java调用处理);Hash数据结构;Set数据结构功能;sortedSet(有序集合)数

    1.Redis和nosql简介,api调用 14.1/ nosql介绍 NoSQL:一类新出现的数据库(not only sql),它的特点: 1.  不支持SQL语法 2.  存储结构跟传统关系型数 ...

  8. redis学习笔记-01 string类型命令

    一.set key value set joker 123456 #设定key为joker,value为123456的数据 二.keys * keys * #用于查看该数据库中所有的key值 三.se ...

  9. redis 五大数据类型之string篇

    一: 1:string(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value. string类型是二进制安全的.意思是redis ...

随机推荐

  1. Qt分析:Qt中的两种定时器

    QTimer类的定时器 QTimer类定时器是QObject类定时器的扩展版或者说升级版,因为它可以提供更多的功能.比如说,它支持单次触发和多次触发. 使用QTimer类定时器的步骤: (1)创建一个 ...

  2. 如何使用原生的Hystrix

    什么是Hystrix 前面已经讲完了 Feign 和 Ribbon,今天我们来研究 Netflix 团队开发的另一个类库--Hystrix. 从抽象层面看,Hystrix 是一个保护器.它可以保护我们 ...

  3. Three.js实现脸书元宇宙3D动态Logo

    背景 Facebook 近期将其母公司改名为 Meta,宣布正式开始进军 元宇宙 领域.本文主要讲述通过 Three.js + Blender 技术栈,实现 Meta 公司炫酷的 3D 动态 Logo ...

  4. [cf1392H]ZS Shuffles Cards

    考虑统计每一轮(以抽到小丑为一轮)的贡献,不难发现答案即期望轮数*每轮期望次数 关于期望轮数,当前牌堆里已经在$S$中的卡实际上没有意义,不妨将这一类卡从牌堆中删除 此时,定义$f_{i}$表示$S$ ...

  5. [atAGC052C]Nondivisible Prefix Sums

    当1为$a_{i}$中出现次数最多的元素(之一),则有以下结论-- 结论:$a_{i}$合法当且仅当$P\not\mid \sum_{i=1}^{n}a_{i}$且$\sum_{i=1}^{n}[a_ ...

  6. [ARC 122]

    最近状态差到爆炸. \(AT\)连掉两把分,啥时候能上黄啊. \(A\) 考虑直接动归. 把\(O(n^2)\)的动归后缀和优化成\(O(n)\) A #include<iostream> ...

  7. 硬盘SSD、HDD和SSHD都是什么意思?哪种类型硬盘最好?

    硬盘分类:(1)HHD 机械硬盘(Mechanical hard disk)(2)SSD 固态硬盘(solid state drive/disk)(3)SSHD 混合硬盘,说白了就是HDD+SSD=S ...

  8. MySQL插入大量数据探讨

    笔者想进行数据库查询优化探索,但是前提是需要一个很大的表,因此得先导入大量数据至一张表中. 准备工作 准备一张表,id为主键且自增: 方案一 首先我想到的方案就是通过for循环插入 xml文件: &l ...

  9. 使用GitHub Action进行打包并自动推送至OSS

    GitHub Action 是 GitHub 于 2018 年 10 月推出的一个 CI\CD 服务. 官方文档:https://docs.github.com/cn/actions CI\CD 持续 ...

  10. JavaBean内省与BeanInfo

    Java的BeanInfo在工作中并不怎么用到,我也是在学习spring源码的时候,发现SpringBoot启动时候会设置一个属叫"spring.beaninfo.ignore", ...