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。

相关推荐
qq_433099401 小时前
Ubuntu20.04从零安装IsaacSim/IsaacLab
数据库
Dlwyz1 小时前
redis-击穿、穿透、雪崩
数据库·redis·缓存
工业甲酰苯胺3 小时前
Redis性能优化的18招
数据库·redis·性能优化
没书读了4 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
i道i4 小时前
MySQL win安装 和 pymysql使用示例
数据库·mysql
小怪兽ysl4 小时前
【PostgreSQL使用pg_filedump工具解析数据文件以恢复数据】
数据库·postgresql
wqq_9922502775 小时前
springboot基于微信小程序的食堂预约点餐系统
数据库·微信小程序·小程序
爱上口袋的天空5 小时前
09 - Clickhouse的SQL操作
数据库·sql·clickhouse
Oak Zhang6 小时前
sharding-jdbc自定义分片算法,表对应关系存储在mysql中,缓存到redis或者本地
redis·mysql·缓存
聂 可 以6 小时前
Windows环境安装MongoDB
数据库·mongodb