Redis数据库与GO(一):安装,string,hash

安装包地址:https://github.com/tporadowski/redis/releases

建议下载zip版本,解压即可使用。解压后,依次打开目录下的redis-server.exe和redis-cli.exe,redis-cli.exe用于输入指令。

一、基本结构

如图,redis对外有个端口,用户发出的指令都要通过这个端口。redis是在内存 中操作的,这是它比别的数据库快的主要原因之一,内存中的结构分为核心组件和数据库,核心组件负责解析指令,存取数据和执行指令。Redis默认有16个数据库,初始默认使用0号库,编号是0...15。内存中的数据库最后存到磁盘中,实现数据持久化。

二、redis的数据类型

Redis的五大数据类型是:String(字符串)、Hash(哈希)、List(列表)、Set(集合)和zset(sorted set:有序集合)

(1)String (字符串):

最基本的类型,一个键对应一个字符串值

可以存储文本、数字、甚至二进制数据(如图片)。

常用操作:

SET key value:设置键的值。

GET key:获取键的值。

INCR key:对存储的数字自增。

(2)Hash (哈希):

键对应一个哈希表,哈希表由字段和字段值组成(类似GO中的map )。

常用操作:

HSET key field value:设置哈希表的字段值。

HGET key field:获取哈希表的字段值。

HGETALL key:获取哈希表中所有字段和值。

(3)List (列表):

键对应一个列表,列表可以从两端进行插入和删除 操作。

常用操作:

LPUSH key value:从左侧插入一个值。

RPUSH key value:从右侧插入一个值。

LPOP key:从左侧移除并返回一个值。

(4)Set (集合):

键对应一个无序 集合,集合中的元素是唯一的,不允许重复。

常用操作:

SADD key member:向集合添加一个元素。

SREM key member:移除集合中的某个元素。

SMEMBERS key:获取集合中所有元素。

(5)Sorted Set有序 集合):

与集合类似,但每个元素都会关联一个分数,根据分数排序

常用操作:

ZADD key score member:向有序集合添加元素和对应的分数。

ZRANGE key start stop:按照分数从低到高返回集合中的元素。

ZREM key member:移除有序集合中的某个元素。

三、string中的CRUD

CRUD是数据库基本操作,其含义如下:

C - Create(创建):插入新记录或创建新数据。

例如:在 MySQL 中,INSERT INTO 是创建数据的常用 SQL 语句。

R - Read(读取):读取数据或查询数据。

例如:SELECT 是读取数据的常用操作。

U - Update(更新):修改现有数据。

例如:UPDATE 用于更新数据库中的记录。

D - Delete(删除):删除数据。

例如:DELETE FROM 用于删除数据。

redis中的string的基本操作语法如下:

1.添加 key-val:[set]

2.查看 当前redis的所有key:[keys *]

3.获取 key:[get key]

4.删除 key:[del key]

5.切换 redis数据库:[select index]

6.如何查看当前数据库的key-val数量 :[dbsize]

7.清空 当前数据库的key-val和清空所有数据库的key-val:[flushdb] [flushall]

注意:redis中没有update指令,但能通过set相同的key实现。

实例:

sql 复制代码
127.0.0.1:6379> set key1 hello
OK
127.0.0.1:6379> get key1
"hello"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get key1
(nil)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> dbsize
(integer) 1
127.0.0.1:6379> set key2 sgg
OK
127.0.0.1:6379> dbsize
(integer) 2
127.0.0.1:6379> set address ᄆᄆᄒᄅ
OK
127.0.0.1:6379> get address
"\xb1\xb1\xbe\xa9"
127.0.0.1:6379> set address beijing
OK
127.0.0.1:6379> get address
"beijing"
127.0.0.1:6379> del address
(integer) 1
127.0.0.1:6379> get address
(nil)

其中set address ᄆᄆᄒᄅ是设置了key的值为"北京",其在内存中的值为"\xb1\xb1\xbe\xa9"。其中(integer)num,表示操作是否成功或查询的对象数量。

四、string中的setex,mset,mget

SETEX专门用于设置带有过期时间的键值对。它的全称是 "Set EXpire",表示在设置键的同时定义其生存时间(TTL, Time to Live)。当键的 TTL 到期后,Redis 会自动删除这个键。语法为:SETEX key seconds value,实例如下:

sql 复制代码
127.0.0.1:6379> setex msg01 10 hello,you
OK
127.0.0.1:6379> get msg01
"hello,you"
127.0.0.1:6379> get msg01
(nil)

这里设置了10秒后删除键msg01,只有在10秒内get才能获取其值。

mset同时设置多个键值对,mget一次获取多个键的值,示例如下:

sql 复制代码
127.0.0.1:6379> mset worker01 tom worker02 scott
OK
127.0.0.1:6379> get worker02
"scott"
127.0.0.1:6379> mget worker01 worker02
1) "tom"
2) "scott"

五、hash

hash是一个键值对集合,相当于GO中的map:var user1 map[string]string

Redis hash是一个string类型的field和value的映射表 ,hash特别适合用于存储对象。

举例,存放一个User信息:

sql 复制代码
user1 name 张三 age 30

说明:哈希表user1中存放了两对field-value :name 张三和age 30。

hset为哈希表中的字段设置值,hget获取哈希表中特定字段的值,hgetall获取哈希表中的所有字段和值,hlen获取哈希表的键值对个数,hexists查看指定key是否在哈希表中。实例如下:

sql 复制代码
127.0.0.1:6379> hset user1 name "smith"
(integer) 1
127.0.0.1:6379> hset user1 age 30
(integer) 1
127.0.0.1:6379> hset user1 job "golang coder"
(integer) 1
127.0.0.1:6379> hget user1 name
"smith"
127.0.0.1:6379> hget user1 age
"30"
127.0.0.1:6379> hget user1 job
"golang coder"
127.0.0.1:6379> hgetall user1
127.0.0.1:6379> hmset user2 name jerry age 110 job "java coder"
OK
127.0.0.1:6379> hmget user2 name age job
1) "jerry"
2) "110"
3) "java coder"
127.0.0.1:6379> hlen user2
(integer) 3
127.0.0.1:6379> hexists user2 name
(integer) 1
127.0.0.1:6379> hexists user2 name2
(integer) 0
127.0.0.1:6379> hgetall user2
1) "name"
2) "jerry"
3) "age"
4) "110"
5) "job"
6) "java coder"

练习:存放一个Student信息:

stu1 name 张三 age 30 score 80 address 北京

请通过相关指令,完成对Student的crud操作。

解析:

Create

sql 复制代码
127.0.0.1:6379> hmset stu1 name zhangsan age 30 score 80 address beijing
OK

Read

sql 复制代码
127.0.0.1:6379> hgetall stu1
1) "name"
2) "zhangsan"
3) "age"
4) "30"
5) "score"
6) "80"
7) "address"
8) "beijing"

Update

sql 复制代码
127.0.0.1:6379> hset stu1 name lisi
(integer) 0
127.0.0.1:6379> hgetall stu1
1) "name"
2) "lisi"
3) "age"
4) "30"
5) "score"
6) "80"
7) "address"
8) "beijing"

Delete

sql 复制代码
127.0.0.1:6379> hdel stu1 age
(integer) 1
127.0.0.1:6379> hgetall stu1
1) "name"
2) "lisi"
3) "score"
4) "80"
5) "address"
6) "beijing"

注意 :HSET 的返回值并不表示值是否更新,而是表示字段是否是新插入的。如果字段是新插入的,返回 (integer) 1。如果字段已经存在(无论值是否改变),返回 (integer) 0。

相关推荐
宇钶宇夕25 分钟前
EPLAN 电气制图:建立自己的部件库,添加部件-加SQL Server安装教程(三)上
运维·服务器·数据库·程序人生·自动化
爱可生开源社区1 小时前
SQLShift 重磅更新:支持 SQL Server 存储过程转换至 GaussDB!
数据库
贾修行1 小时前
SQL Server 空间函数从入门到精通:原理、实战与多数据库性能对比
数据库·sqlserver
傲祥Ax1 小时前
Redis总结
数据库·redis·redis重点总结
一屉大大大花卷2 小时前
初识Neo4j之入门介绍(一)
数据库·neo4j
不老刘3 小时前
基于LiveKit Go 实现腾讯云实时音视频功能
golang·腾讯云·实时音视频
周胡杰3 小时前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
wkj0013 小时前
navicate如何设置数据库引擎
数据库·mysql
赵渝强老师3 小时前
【赵渝强老师】Oracle RMAN的目录数据库
数据库·oracle
暖暖木头3 小时前
Oracle注释详解
数据库·oracle