第十八章:Redis的具体使用——string类型与key的操作

更新于:2020-12-18 14:39:12

打开Redis的客户端终端界面:


Redis的bin目录



redis-cli是客户端执行文件,直接执行它就打开了一个客户端的终端


1.png


类似于mysql bin目录的mysql执行文件,命令也比较相似,可以指定ip和端口号

redis-cli -h 【ip】 -p 【端口】

使用exit命令可退出。


string类型


string(字符串)是redis最基本的类型,redis的string可以包含任何数据,包括jpg图片或者序列化的对象。单个value值最大上限是1G字节。


如果只用string类型,redis就可以被看作是具有持久化特性的memcache。


string类型的数据操作命令有:


1.png


下面做下演示


①为一个key设置值


set name nanshen //set 设置值
get name //get 读取值


1.png


②一次为多个key设置值


mset a1 hello a2 world
mget a1 a2


1.png


数值字符串操作


一个key的值为整型的,可以使用incr、decr、incrby、decrby命令对它做加减运算。


incr score
decr score
incrby score 5
decrby score 3


1.png


说明两点:


(1)当key没有值时,作加减运算时值默认是0。


1.png


(2)当key有值时,值必须为整型的


1.png



④值的追加


append name world
append name ' world'


1.png


⑤截取key的值字符串


substr name 0 4


1.png


同PHP的substr函数,使用不同的一点PHP函数substr最后一个参数是length长度,而Redis substr命令最后一个参数是结束的下标值


⑥获取key的值的长度


strlen name


1.png



key(键)


string类型的数据是最常用的,后面还会学习其他结构的数据操作。其他结构的数据操作,也是基于key来操作的。


key是Redis每一个独立存储的数据名称,类似于编程语言的变量。


key的命名:


key的命名规则不同于一般语言,键盘上除了空格、\n换行外其他的大部分字符都可以使用。

像“my key”和“mykey\n”这样包含空格和换行的key是不允许的。


我们在使用的时候可以自己定义一个Key的格式,例如 object-type:id:field 。

Key不要太长,占内存,查询慢。

Key不要太短,像 u:1000:pwd 就不如 user:1000:password  可读性好。


key的操作:


1.png


以上的这些命令,不仅适用于string类型的数据,也适用于后面学习的其他几种数据结构的数据。


① exists 命令用于检查给定 key 是否存在


1.png


key 存在返回 1 ,否则返回 0


② del 命令用于删除已存在的键。不存在的 key 会被忽略


1.png



③type 命令用于返回 key 所储存的值的类型


返回 key 的数据类型,数据类型有:none (key不存在)、string (字符串)、list (列表)、set (集合)、zset (有序集)、hash (哈希表)。


1.png


④ keys 命令用于查找所有符合给定模式 pattern 的 key 


获取 redis 中所有的 key 可用使用 *


1.png


⑤ randomkey 命令从当前数据库中随机返回一个 key 


当数据库不为空时,返回一个 key 。 当数据库为空时,返回 nil (windows 系统返回 null)。


1.png


⑥ rename 命令用于修改 key 的名称


改名成功时提示 OK ,失败时候返回一个错误。

当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。 当 NEW_KEY_NAME 已经存在时, RENAME 命令将覆盖旧值。


1.png


⑦ TTL 命令以秒为单位返回 key 的剩余过期时间



当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。

注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。


⑧expire 命令用于设置 key 的过期时间,key 过期后将不再可用。单位以秒计。


设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。


1.png


注意:


Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念。


Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。


每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持16个数据库(可以通过配置文件支持更多,无上限),可以通过配置databases来修改这一数字。客户端与Redis建立连接后会自动选择0号数据库,不过可以随时使用SELECT命令更换数据库,如要选择1号数据库:


redis> SELECT 1
OK
redis [1] > GET foo
(nil)


然而这些以数字命名的数据库又与我们理解的数据库有所区别。


首先Redis不支持自定义数据库的名字,每个数据库都以编号命名,开发者必须自己记录哪些数据库存储了哪些数据。另外Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么连一个数据库也没有权限访问。最重要的一点是多个数据库之间并不是完全隔离的,比如FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据。


综上所述,这些数据库更像是一种命名空间,而不适宜存储不同应用程序的数据。比如可以使用0号数据库存储某个应用生产环境中的数据,使用1号数据库存储测试环境中的数据。但不适宜使用0号数据库存储A应用的数据,使用1号数据库存储B应用的数据,不同的应用应该使用不同的Redis实例存储数据。由于Redis非常轻量级,一个空Redis实例占用的内在只有1M左右,所以不用担心多个Redis实例会额外占用很多内存。