5、Redis五大基本数据类型——String类型

一、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>
posted @ 2021-11-11 14:55  不起眼的程序员  阅读(412)  评论(0编辑  收藏  举报