Redis基础知识与应用技巧

发表时间: 2024-04-16 03:16

Redis理论

Redis是一个完全开源免费的高性能(NOSQL)的key-value数据库。它遵守BSD协议,使用ANSI C语言编写,并支持网络和持久化。Redis采用自己实现的分离器来实现高速的读写操作,效率非常高。Redis是一个简单、高效、分布式、基于内存的缓存工具,通过网络连接提供Key-Value式的缓存服务。

Redis的数据结构:字符串(Strings),列表(lists),集合(set)...

list特点:有序可重复

set特点:无序不重复

Redis实践

前期准备

下载Redis

Redis - The Real-time Data Platform

下载完成点击Redis文件夹中的redis-cli.exe或者使用图像化界面的Redis客户端进行操作


Redis的字符串数据结构操作

往Redis中添加一条字符串的命令:

set key value

key可以是数字、大小写字母、下画线或者中文(不建议使用,因为在列出Redis当前所有Key时,中文内容会变得难以阅读)。

value可以是任意内容。

往Redis中添加一个字符串,使用的关键字为set。假设它的Key为“give_me”,它的值为“YES”,那么可以使用如下命令来实现:

例子:set give_me YES

如果值的内容有空格,那么直接添加值就会报错。为防止报错,则需要使用双引号把有空格的内容包起来:

例子:set give_me "YES NO"


列出Redis所有Key时,中文会变成Unicode码:

keys *


读取字符串:

get key

例子:get give_me


修改Key里面的值:

set key newValue

如果Redis不存在这个Key,那么使用“set”命令可以创建它;如果Redis里面已经有了这个Key,那么使用“set”命令可以用新的值覆盖旧的值。

例子:set give_me NO

如果不希望set命令覆盖旧的值,可以使用一个参数“NX”。如果一个Key已经存在于Redis中,那么就不覆盖,直接放弃操作。

set key value NX

例子:set give_me NO NX


修改是给字符串的末尾加上其他字符串:

append key value

例子:append give_me YESYES


值的加减1或者加减n:

Incr会让Key里的数字增加1:

incr key

例子:incr give

decr会让Key里的数字减少1:

decr key

例子:decr give

incrby会让Key里的数字增加n:

incrby key n

例子:incrby give 6

decrby会让Key里的数字减少n:

decrby key n

例子:decrby give 6



Redis列表数据结构操作

插入数据:

lpush key value1 value2 value3

rpush key value1 value2 value3

lpush:从列表左侧插入数据

rpush:从列表右侧插入数据

例子:

lpush list_one hello

rpush list_one hi


查看列表长度:

llen key

例子:llen list_one


根据索引查看数据:

lrange listsName indexStart indexEnd

例子:lrange list_one 0 2

索引从最左边开始编号,从0到“列表长度-1”,Redis的列表也支持“负索引”,索引“-1”表示最右边的数据,“-2”表示右数第2个数据,以此类推。


查看列表的所有数据:

lrange key 0 -1

例子:lrange list_one 0 -1

由于一个列表可以储存几百万条数据,所以,绝对不要冒然列出一个列表里面的所有数据,否则可能导致大量数据输出而瞬间耗尽系统的I/O资源。应该先查看列表的长度(llen key eg.llen list_one),如确定数据量很小,则列出所有的值;如果数据量很大,则可以使用索引查看头几条数据与末尾几条数据。


弹出数据:

lpop key

rpop key

lpop:从左边弹出数据

rpop:从右边弹出数据

在弹出数据的同时,被弹出的这个数据也会被从列表中删除

例子:

lpop list_one

rpop list_one

修改数据:

lset key index newValue

例子:lset list_one 6 you


Redis集合数据结构操作

插入数据:

sadd key value1 value2 value3

因为Redis的集合数据结构不允许插入重复值,所以插入重复值的话会插入失败

读取集合中数据的长度:

scard key

例子:scard set_one

获取数据:

spop key count

例子:spop set_one 6

如果“count”省略,则表示随机获取1条数据;如果“count”为其他大于1的整数,则会获取多条数据;如果“count”对应的整数超过了集合总数据的条数,则获取集合中的所有数据。获取一条数据后,这一条数据就被会被从集合中删除。

获取集合中所有的数据:

smembers key

例子:smembers list_one

smembers命令不会删除数据。但是如果集合里的数据量极大,就应该慎重使用“获取所有数据”,因为这样会导致系统的I/O资源瞬间被耗尽。

判断集合中是否存在该数据:

sismember key value

例子:sismember list_one demo

删除特定数据:

srem key value1 value2 value3

例子:srem list_one 1

集合中的交集:

sinter key1 key2 key3

例子:sinter list_one list_two list_three

交集是指,既属于A,又属于B的数据构成的集合。

集合中的并集:

sunion key1 key2 key3

例子:sunion list_one list_two list_three

集合的“并集”是指,只属于集合A的数据与只属于集合B的数据,以及既属于A又属于B的数据构成的集合,集合A与集合B都有的数据需要去重

集合中的差集:

sdiff key1 key2 key3

集合的“差集”是指,只属于一个集合,不属于其他集合的数据构成的集合

例子:sdiff list_one list_two list_three

有误之处望指点!【Email:3147310397@qq.com】