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 分钟前
英语词汇小程序小程序|英语词汇小程序系统|基于java的四六级词汇小程序设计与实现(源码+数据库+文档)
java·数据库·小程序·源码·notepad++·英语词汇
2401_857026231 小时前
时尚界的技术革新:Spring Boot与“衣依”服装销售
数据库·spring boot·性能优化
bbqz0071 小时前
逆向WeChat(七)
数据库·c++·微信·逆向·protobuf·sqlcipher·破解密钥·解码protobuf·wechatdb
七折困1 小时前
DBMS-3.4 SQL(4)——存储过程和函数&触发器
数据库·sql
皮皮虾在睡觉2 小时前
数据库基础04
android·数据库
程序员的春天12 小时前
基于Springboot+Vue的线上课堂系统(含源码数据库)
数据库·vue.js·spring boot
丶21362 小时前
【SQL】深入理解SQL:从基础概念到常用命令
数据库·后端·sql
陈序缘3 小时前
Go语言实现长连接并发框架 - 消息
linux·服务器·开发语言·后端·golang
__AtYou__3 小时前
Golang | Leetcode Golang题解之第455题分发饼干
leetcode·golang·题解