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。

相关推荐
Li zlun1 小时前
MySQL 性能监控与安全管理完全指南
数据库·mysql·安全
养生技术人1 小时前
Oracle OCP认证考试题目详解082系列第48题
运维·数据库·sql·oracle·database·开闭原则·ocp
海阳宜家电脑2 小时前
Lazarus使用TSQLQuery更新的一点技巧
数据库·lazarus·tsqlquery
沐浴露z2 小时前
分布式场景下防止【缓存击穿】的不同方案
redis·分布式·缓存·redission
丨我是张先生丨2 小时前
SQLSERVER 查找存储过程中某个变量
数据库
感谢地心引力3 小时前
【Python】基于 PyQt6 和 Conda 的 PyInstaller 打包工具
数据库·python·conda·pyqt·pyinstaller
lypzcgf4 小时前
Coze源码分析-资源库-编辑数据库-后端源码-数据存储层
数据库·coze·coze源码分析·智能体平台·ai应用平台
jackaroo20204 小时前
后端_Redis 分布式锁实现指南
数据库·redis·分布式
liuy96155 小时前
迷你论坛项目
数据库
杨云龙UP5 小时前
小工具大体验:rlwrap加持下的Oracle/MySQL/SQL Server命令行交互
运维·服务器·数据库·sql·mysql·oracle·sqlserver