Redis学习笔记:事务
一、事务的描述
和MySQL
一样,Redis
中也有事务
这一个概念,redis中的事务也是可以用来执行一组命令的集合,同时也可以把事务当作一个命令。因为它的特性和命令无差,要么正确全部运行,要么错误都不运行。但是和MySQL
的事务不同的是,redis中的事务不支持回滚操作。也就是说,一旦事务出错,它没有办法再回到程序出错前,只能由程序员自己想办法来处理剩下的烂摊子。
和MySQL
一样,Redis
中也有事务
这一个概念,redis中的事务也是可以用来执行一组命令的集合,同时也可以把事务当作一个命令。因为它的特性和命令无差,要么正确全部运行,要么错误都不运行。但是和MySQL
的事务不同的是,redis中的事务不支持回滚操作。也就是说,一旦事务出错,它没有办法再回到程序出错前,只能由程序员自己想办法来处理剩下的烂摊子。
defer
是golang中独有的流程控制语句,用于延迟指定语句的运行时机,运行于函数的内部,当他所属函数运行完之后它才会被调用。
例如以下使用defer的代码:
func main() {
defer fmt.Println("HelloDefer")
fmt.Println("HelloWorld")
}
输出结果为:
HelloWorld
HelloDefer
在redigo
官方的文档描述中,Receive()
方法是不支持多并发的,原文为:
Connections support one concurrent caller to the Receive method and one concurrent caller to the Send and Flush methods. No other concurrency is supported including concurrent calls to the Do method.
redigo
是一个redis
的go client
,官方描述为:Redigo is a Go client for the Redis database.
基本特点:
项目首页:https://github.com/garyburd/redigo/
官方文档:https://godoc.org/github.com/garyburd/redigo/redis
安装:go get github.com/garyburd/redigo/redis
今天打开redis输入命令zadd k 1 maqian 2 xiaoming 3 xiaohua
报错,百度了一下出现这个问题的原因是已经存在一个别的类型的键k
,把原来的k
删除即可。
127.0.0.1:6379> zadd k 1 maqian 2 xiaoming 3 xiaohua
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> keys *
1) "rs"
2) "dst"
3) "k" # 已经存在了一个k
4) "k2"
5) "k3"
127.0.0.1:6379> del k
(integer) 1
127.0.0.1:6379> zadd k 1 maqian 2 xiaoming 3 xiaobai
(integer) 3
有序集合也是集合的一种,顾名思义,它和集合的不同之处在于它是有序的 ,而集合无序。它通过给集合中每一个元素都关联一个分数来是的元素有序,同时提供了多个方式获取排序之后的元素。
增加元素:
ZADD key score member [score member ...]
当key不存在时自动创建,分数支持整数和双精度浮点数,同时还可以使用+inf
和-inf
分别表示正无穷大和负无穷大。执行成功返回添加的元素个数。
删除元素:
ZREM key member [member ...]
移除元素,返回成功移除的个数。
集合是redis中的基本数据类型之一,redis中的集合可以用来存储一堆无序的元素,集合内的元素不会重复,只有存在或者不存在两种属性。
redis集合内部是由intset
和hashtable
实现的,当条件不满足时redis会自动转换内部编码。集合中使用intset
的条件:
一旦两者的任一条件不满足时,就会转换成hashtable
编码。
redis的列表类型可以存储一个有序的字符串列表,内部实现是一个双向链表,允许用户从两端插入元素。所以向两端插入数据的速度是极快的,而且获取数据时也是越接近两端速度越快,一个列表最多能容纳2^32 - 1
个元素。
LPUSH key value [value ...]
:在列表的左端插入元素。RPUSH key value [value ...]
:在列表的右端插入元素。返回值表示增加元素后的列表长度。
Redis
本生就是一个字典类型的键值关系数据库,结构为:
而其中还有一种散列类型的数据结构散列
,它也是一种字典结构,存储了字段关系的映射。
散列就像是一个小的redis一样,只不过这个小型redis不支持其他类型,只能是字符串。