Redis学习笔记:事务
一、事务的描述
和MySQL
一样,Redis
中也有事务
这一个概念,redis中的事务也是可以用来执行一组命令的集合,同时也可以把事务当作一个命令。因为它的特性和命令无差,要么正确全部运行,要么错误都不运行。但是和MySQL
的事务不同的是,redis中的事务不支持回滚操作。也就是说,一旦事务出错,它没有办法再回到程序出错前,只能由程序员自己想办法来处理剩下的烂摊子。
和MySQL
一样,Redis
中也有事务
这一个概念,redis中的事务也是可以用来执行一组命令的集合,同时也可以把事务当作一个命令。因为它的特性和命令无差,要么正确全部运行,要么错误都不运行。但是和MySQL
的事务不同的是,redis中的事务不支持回滚操作。也就是说,一旦事务出错,它没有办法再回到程序出错前,只能由程序员自己想办法来处理剩下的烂摊子。
在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不支持其他类型,只能是字符串。
任何一门程序语言都离不开位运算这个功能,redis虽然不是一门编程语言,但也是一个和编程密切关联的工具。因此位运算自然也是redis中不可或缺的功能。
redis中位运算相关的方法:
GETBIT key offset
: 获取第offset位的bit,不存的的比特位返回0。SETBIT key offset value
: 给第offset位设置成value。BITCOUNT key [start] [end]
: 计算key中1的个数。BITOP operation destkey key [key]
: 执行位操作,位操作包含与(AND)
、或(OR)
、异或(XOR)
以及 非(NOT)
。BITPOS key value [start] [end]
: 查询key
中第一次出现value
的位置,start
和end
表示字符的开始和结束位置。字符串是redis中的基本数据类型之一,能存储任何形式的字符串,包括二进制数据。同时,它还可以进行字符串运算、数据运算和位运算等操作。一个字符串最大能有512M。
字符串主要的操作命令有两个:
GET KEY
: 如果KEY
存在就返回对应的值,如果不存在则返回空值nil
。SET KEY VALUE
: 给KEY
设置值为VALUE
,如果KEY
已经存在则更新值。