终篇:讲课用这个就行
<p><font color='red'>redis.NewClient() </font> 和<font color='red'> redis.Dial() </font> 都是使用Go语言操作Redis的方法。但是它们有很大的区别。</p>
<p>redis.NewClient()是github.com/go-redis/redis包中提供的一个快捷方法,用于创建一个新的Redis客户端对象。这个方法接收一个RedisOptions结构体变量,用于指定Redis服务器的选项(例如:地址、认证等)。这个方法在内部使用Dial()函数,在底层建立对Redis服务器的网络连接,管理连接池,控制重试和超时等。</p>
<p>而redis.Dial()是github.com/gomodule/redigo/redis包中提供的一个函数,这个函数用于建立Redis服务器的网络连接。这个方法接收Redis服务器的网络地址和DialOption选项(例如:密码、超时、read_only标志等)。该函数返回一个redis.Conn类型的对象,您可以使用该对象执行Redis命令,并在命令完成后调用Close()方法关闭连接。</p>
<p>总之,redis.NewClient()是一个高级客户端,提供了更为便利的方法来连接和管理Redis服务器。而redis.Dial()是一个底层函数,您需要手动管理连接并执行Redis命令。</p>
<hr />
<p>当使用Go语言操作Redis时,您将会用到下列五种数据类型:</p>
<p>1、String类型:String是最基本的数据类型,常被用于缓存短暂生存时间的数据,如Session Token等。使用Go语言,您通过redis.Client对象的Set()和Get()方法来设置和获取String数据。下面是一个示例:</p>
<pre><code class="language-go">package main
import (
&quot;fmt&quot;
&quot;github.com/go-redis/redis&quot;
)
func main() {
client := redis.NewClient(&amp;redis.Options{
Addr: &quot;localhost:6379&quot;,
Password: &quot;&quot;,
DB: 0,
})
err := client.Set(&quot;key&quot;, &quot;value&quot;, 0).Err()
if err != nil {
panic(err)
}
val, err := client.Get(&quot;key&quot;).Result()
if err != nil {
panic(err)
}
fmt.Println(&quot;key&quot;, val)
}
</code></pre>
<p>2、List类型:List可让您在列表的两端插入和删除其元素,类似于双向队列的数据结构。使用Go语言,您可以通过redis.Client对象的LPush()和RPop()等方法来操作List数据类型。下面是一个示例:</p>
<pre><code class="language-go">package main
import (
&quot;fmt&quot;
&quot;github.com/go-redis/redis&quot;
)
func main() {
client := redis.NewClient(&amp;redis.Options{
Addr: &quot;localhost:6379&quot;,
Password: &quot;&quot;,
DB: 0,
})
err := client.LPush(&quot;list&quot;, &quot;item1&quot;, &quot;item2&quot;, &quot;item3&quot;).Err()
if err != nil {
panic(err)
}
val, err := client.RPop(&quot;list&quot;).Result()
if err != nil {
panic(err)
}
fmt.Println(&quot;list&quot;, val)
}
</code></pre>
<p>3、Set类型:Set是无序的元素集合,意味着您不能保证一个Set的元素以特定的顺序存储,并且每个元素在集合中只出现一次。使用Go语言,您可以通过redis.Client对象的SAdd()和SMembers()等方法来操作Set数据类型。下面是一个示例:</p>
<pre><code class="language-go">package main
import (
&quot;fmt&quot;
&quot;github.com/go-redis/redis&quot;
)
func main() {
client := redis.NewClient(&amp;redis.Options{
Addr: &quot;localhost:6379&quot;,
Password: &quot;&quot;,
DB: 0,
})
err := client.SAdd(&quot;set&quot;, &quot;item1&quot;, &quot;item2&quot;, &quot;item3&quot;).Err()
if err != nil {
panic(err)
}
val, err := client.SMembers(&quot;set&quot;).Result()
if err != nil {
panic(err)
}
fmt.Println(&quot;set&quot;, val)
}
</code></pre>
<p>4、Hash类型:Hash是一个键值对集合,常被用于保存用户信息、评论和其他数据。使用Go语言,您可以通过redis.Client对象的HSet()和HGetAll()等方法来操作Hash数据类型。下面是一个示例:</p>
<pre><code class="language-go">package main
import (
&quot;fmt&quot;
&quot;github.com/go-redis/redis&quot;
)
func main() {
client := redis.NewClient(&amp;redis.Options{
Addr: &quot;localhost:6379&quot;,
Password: &quot;&quot;,
DB: 0,
})
err := client.HSet(&quot;hash&quot;, &quot;field1&quot;, &quot;value1&quot;).Err()
if err != nil {
panic(err)
}
val, err := client.HGetAll(&quot;hash&quot;).Result()
if err != nil {
panic(err)
}
fmt.Println(&quot;hash&quot;, val)
}
</code></pre>
<p>hash 批量 set 示例:</p>
<pre><code class="language-go">package main
import (
&quot;fmt&quot;
&quot;github.com/go-redis/redis&quot;
)
func main() {
client := redis.NewClient(&amp;redis.Options{
Addr: &quot;localhost:6379&quot;,
Password: &quot;&quot;,
DB: 0,
})
err := client.HMSet(&quot;myhash&quot;, map[string]interface{}{
&quot;field1&quot;: &quot;value1&quot;,
&quot;field2&quot;: &quot;value2&quot;,
&quot;field3&quot;: &quot;value3&quot;,
}).Err()
if err != nil {
panic(err)
}
fmt.Println(&quot;Values set successfully&quot;)
}
</code></pre>
<p>5、ZSet类型:ZSet是有序的元素集合,每个元素都有与之关联的分数,您可以通过分数来按照升序或降序排列集合中的元素,类似于索引。使用Go语言,您可以通过redis.Client对象的ZAdd()和ZRange()等方法来操作ZSet数据类型。下面是一个示例:</p>
<pre><code class="language-go">package main
import (
&quot;fmt&quot;
&quot;github.com/go-redis/redis&quot;
)
func main() {
client := redis.NewClient(&amp;redis.Options{
Addr: &quot;localhost:6379&quot;,
Password: &quot;&quot;,
DB: 0,
})
err := client.ZAdd(&quot;zset&quot;, &amp;redis.Z{Score: 1, Member: &quot;one&quot;}, &amp;redis.Z{Score: 2, Member: &quot;two&quot;}).Err()
if err != nil {
panic(err)
}
val, err := client.ZRangeWithScores(&quot;zset&quot;, 0, -
</code></pre>