《Redis核心原理与实战》学习笔记3——字符串使用与内部实现原理

一、简介

Redis最常用的数据类型有5种,分别是:字符串类型、列表类型、哈希表类型、集合类型、有序集合类型。其中,最常用的是字符串类型。

字符串类型的全称是Simple Dynamic Strings,简称SDS,它是以键值对key-value的形式进行存储的,根据key来存储和获取value值,在实际项目中应用非常广泛。

二、字符串类型应用场景

1、页面数据缓存

当数据量和并发量达到一定级别后,数据库就会拖慢系统运行,为了避免这种情况发生,我们可以把查询结果放入缓存(Redis)中,让下次同样的查询直接去缓存取结果,而非查询数据库,这样既减少数据库的压力,同时也提高程序的运行速度。

2、数字计算与统计

Redis可以用来存储整数和浮点类型的数据,并且可以通过命令直接累加并存储整数信息,这样就省去了每次要先取数据、转换数据、拼加数据、再存入数据的麻烦,只需要一个命令就可以完成此流程。因此可以使用此功能来实现访问量的统计,当有人访问时访问量 +1 即可。

3、共享Session信息

使用Session保存用户的会话(登录)状态时,这些Session信息会被保存在服务器端,但这只适用于单系统应用,如果是分布式系统,分布式系统每次会把请求随机分配到不同的服务器,假设用户的Session信息被存储在服务器A,第二次访问时用户被分配到服务器B,但服务器B并没有用户的Session信息,就会出现需要重复登录的问题。

因此分布式系统,可以借助Redis将Session信息统一存储管理,这样无论请求发送到哪台服务器,服务器都可以去缓存系统获取用户的Session信息,解决了分布式系统下Session存储的问题。

三、字符串常用命令操作

1、添加键值对

语法:

添加单一键值对:set key value
添加单一或多个键值对:mset key1 value1 key2 value2...

127.0.0.1:6379> set cacheStr redis
OK

127.0.0.1:6379> set key1 redis key2 memcache
OK

2、获取键值对

语法:

获取单一键值对:get key
获取单一或多个键值对:mget key1 key2 key3...

127.0.0.1:6379> get cacheStr
"redis"

127.0.0.1:6379> mget key1 key2
1) "redis"
2) "memcache"

3、给键值设置过期时间

语法:

a. set key value [expiration EX seconds|PX milliseconds]
其中:EX表示过期时间单位为秒,PX则为毫秒

127.0.0.1:6379> get cacheStr ex 1000
OK

b. setex key seconds value
此命令设置的过期时间单位为秒

127.0.0.1:6379> setex cacheStr 1000
OK

c. psetex key milliseconds value
此命令设置的过期时间单位为毫秒

127.0.0.1:6379> psetex cacheStr 1000
OK

d. ttl key
此命令用于查询键的过期时间

127.0.0.1:6379> ttl cacheStr
(integer) 995

4、给元素追加值

语法:append key value
如果key已经存在并且是一个字符串,append命令将指定的value追加到该key原来值的末尾。

127.0.0.1:6379> append cacheStr memcache  
(integer) 7

127.0.0.1:6379> get cacheStr
"redismemcache"

5、查询字符串的长度

语法:strlen key

127.0.0.1:6379> strlen cacheStr
(integer)12

6、数字统计

a. 给整数类型的值加、减1
语法:

加:incr key
减:decr key

b. 给key加、减指定的值
语法:

加:incrby key value
减:decrby key value
如果key不存在,会先初始化此key为0,再进行整数值的加、减。

四、字符串的内部数据类型

Redis的字符串对象包含了三种不同的数据类型:int、embstr 和 raw。
使用object encoding key命令可以查看对象(键值对)存储的数据类型。

1、int

整数类型对应int类型:

127.0.0.1:6379> set key 666
OK
127.0.0.1:6379> object encoding key
"int"

2、embstr

字符串对应embstr类型:

127.0.0.1:6379> set key abc
OK
127.0.0.1:6379> object encoding key
"embstr"

3、raw

当字符串长度大于44字节时,会变为raw类型存储:

127.0.0.1:6379> set key abcdefghigklmnopqrstyvwxyzabcdefghigklmnopqrs
OK
127.0.0.1:6379> object encoding key
"raw"
原文地址:https://www.cnblogs.com/luckyliulin/p/13553973.html